首页 > 解决方案 > 根据特定的字符模式拆分字符串

问题描述

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

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

示例数据 > 'Notes' 列:

2016 年 3 月 30 日-开会 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,  '-')

欣赏任何见解或想法!

标签: sqlsql-server

解决方案


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

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;

是一个 db<>fiddle。


推荐阅读