You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何将含多日期日志的单条记录拆分为多行?

实现单条记录按日志拆分的SQL方案

针对你的需求,直接用CROSS APPLY配合STRING_SPLIT拆分日志,再通过字符串函数提取日期和内容即可,以下是可行代码:

基础实现(适用于SQL Server 2016+)

假设源表名为CaseLogs,字段为Case_Number和Comment:

SELECT 
    cl.Case_Number,
    -- 提取日期时间
    SUBSTRING(splitted.value, 1, CHARINDEX(' - ', splitted.value) - 1) AS Log_Datetime,
    -- 提取日志内容
    SUBSTRING(splitted.value, CHARINDEX(' - ', splitted.value) + 3, LEN(splitted.value)) AS Log_Content
FROM 
    CaseLogs cl
CROSS APPLY 
    STRING_SPLIT(cl.Comment, '<br>') splitted
WHERE 
    cl.Case_Number = 'INC0112233' -- 如需处理所有记录可移除该条件

兼容格式不固定的场景

如果日志里的「日期时间 - 内容」分隔符前后空格不统一,用PATINDEX替代CHARINDEX更灵活:

SELECT 
    cl.Case_Number,
    SUBSTRING(splitted.value, 1, PATINDEX('% - %', splitted.value) - 1) AS Log_Datetime,
    SUBSTRING(splitted.value, PATINDEX('% - %', splitted.value) + 3, LEN(splitted.value)) AS Log_Content
FROM 
    CaseLogs cl
CROSS APPLY 
    STRING_SPLIT(cl.Comment, '<br>') splitted
WHERE 
    cl.Case_Number = 'INC0112233'
    AND PATINDEX('% - %', splitted.value) > 0 -- 过滤无效格式的日志行

注意事项

  • STRING_SPLIT仅支持SQL Server 2016及以上版本,旧版本需自行实现自定义字符串拆分函数
  • 若Comment字段存在连续<br>或空日志行,可通过WHERE TRIM(splitted.value) <> ''过滤空行

内容的提问来源于stack exchange,提问作者npr932

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:13:31