sql - 根据特定的字符模式拆分字符串
问题描述
基本上,我希望能够在每个日期之后将一个长文本字段拆分为与日期相对应的唯一行。源字段“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, '-')
欣赏任何见解或想法!
解决方案
嗯。我认为这可以满足您的要求:
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。
推荐阅读
- python - 通过 TensorFlow 消费大数据
- docker - 在 Kubernetes 集群中部署内部 docker 镜像
- html - 在 html 中显示多张图片,而无需为每一张都写一个标签
- dart - Flutter:覆盖触发重建中的文本字段
- javascript - 如何使用 javascript 显示/隐藏复数 div?
- java - 如果在 Java 中使用原始类型,如何强制编译错误以强制泛型类型参数?
- node.js - 如何在 Node.js 中正确调用 AWS.CloudFront.Signer?
- node.js - 为什么将 ESM 转换为 CommonJS 不是简单的查找和替换?
- python - RabbitMQ pika.exceptions.ConnectionClosed (-1, "error(104, 'Connection reset by peer')")
- excel - Excel VBA:为什么我的 Range 变量无论设置为什么都不返回?