根据特定的字符模式分割字符串

时间:2020-06-11 02:11:10

标签: sql sql-server

基本上,我希望能够在每个日期之后将一个长文本字段拆分为与日期相对应的唯一行。源字段“ Notes”只是一个长期运行的文本字段,随着时间的推移会有多个注释,并且带有不同的日期...最初,我尝试将日期后的“-”分隔开,这在某种程度上可行,除非其他地方有破折号在文本中。因此,我正在考虑可以将日期的每个唯一实例(mm / dd / yy)分开的问题……一个问题是长度不一致,含义可能是:

'm / d / yy-'或'mm / dd / yy-'或'mm / d / yy-'

示例数据>“注释”列:

3/30 / 16-召开会议2/5 / 16-LVM 10/5 / 15-向客户发言

*单个单元格中可能包含多个日期和注释 寻找这样的最终结果:

Date        Value
3/30/16     Had a meeting
2/15/16     LVM
10/5/15     Spoke to customer

我正在使用类似下面的基本内容,但想知道我是否可以通过STRING_SPLIT变得更复杂

SELECT NOTES, VALUE
FROM SRC_TABLE
CROSS APPLY STRING_SPLIT(NOTES,  '-')

赞赏任何见解或想法!

1 个答案:

答案 0 :(得分:0)

嗯。我认为这可以满足您的要求:

select t.*, s.*
from src_table t outer apply 
     (select value as value_date
      from string_split(t.notes, '-') s
      where s.value like '%/%/%' and s.value not like '%/%/%/%'
     ) s;

编辑:

如果您只想拆分第一个-,则可以使用:

select left(notes, charindex('-', notes + '-') - 1),
       stuff(notes, 1, charindex('-', notes + '-'), '')
from src_table;

Here是db <>小提琴。