一个单元格中有多行的 SQL 子字符串问题
Posted
技术标签:
【中文标题】一个单元格中有多行的 SQL 子字符串问题【英文标题】:SQL substring issue with multiple rows in one cell 【发布时间】:2021-12-15 18:24:49 【问题描述】:我有一个 SQL 单元格,其中 1 个单元格中有多行。 我想选择特定的第 2 行。我可以使用 substring 选项,但我不知道如何设置第二个语句。 我现在有:
substring( tbart.artdiscirption, charindex('\n', tbart.artdiscirption ) - 1 ,len(tbart.artdiscirption)) as short_article
在这个子字符串中,我丢失了第一行,但没有丢失其他行(当然因为我使用了字符串的 charindex 和长度)。
我在子字符串中尝试了一个子字符串,但它不起作用。
【问题讨论】:
请提供样本数据和期望的结果。 "我有一个 SQL 单元格,其中 1 个单元格中有多行。" ——这是一个设计缺陷。如果某些东西不被认为是原子的,则它不属于一列。它需要在其原子中进行拆分,并且每个原子都必须存储在几列或几行中。 【参考方案1】:如果 2016+,您可以使用一点 JSON。
注意:使用\n
的分隔符有效,但怀疑您可能真的有\r\n
,这也可以。
示例
Declare @YourTable table (ID int,SomeCol nvarchar(max))
Insert Into @YourTable values
(1,'Line 1
Line 2
Line 3'),
(2,'Line A
Line B
Line C'
)
Select A.ID
,Pos2 = JSON_VALUE(S,'$[1]')
From @YourTable A
Cross Apply ( values ( '["'+replace(string_escape(SomeCol,'json'),'\n','","')+'"]' ) ) B(S)
结果
ID Pos2
1 Line 2
2 Line B
【讨论】:
以上是关于一个单元格中有多行的 SQL 子字符串问题的主要内容,如果未能解决你的问题,请参考以下文章