一个单元格中有多行的 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 子字符串问题的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas 中的一个单元格拆分为多行

将单元格中的多个值拆分为多行 - Oracle SQL

具有多行的数据网格单元格中的中心文本

具有固定高度的表格单元格中的自动布局多行标签

DataTable - 单元格中的仅颜色子字符串

有没有办法从 OpenOffice Calc 中的单元格中提取子字符串?