从SQL Server的字符串中提取数字



我有一个表,其中一列包含特定进程的不同备注。

有时是1个注释,有时是4个不同的注释。

它看起来像这样:

Remarks 
|180|
|180|
|180|
|180|360|
|180|
|180|
|180|
|180|360|

我需要把注释放在不同的列中。

我在一些注释中看起来很具体,所以我可以为每个列创建一个case。

你能告诉我如何提取或查找元组中的数字吗?

SQL Server 2016及以上版本:

;WITH shattered AS 
(
SELECT t.Remarks, j.[key], j.value
FROM dbo.TheTable AS t
CROSS APPLY 
OPENJSON('["' + REPLACE(t.Remarks, '|', '","') + '"]') AS j
WHERE j.value > ''
)
SELECT Remarks, 
Remark1 = [1], 
Remark2 = [2], 
Remark3 = [3], 
Remark4 = [4]
FROM shattered 
PIVOT (MAX(value) FOR [key] IN ([1],[2],[3],[4])) AS p;
  • db&lt例子;在小提琴

您可以在现代版本的SQL Server上使用STRING_SPLITPIVOT

SELECT
Remarks.*
FROM YourTable t
CROSS APPLY (
SELECT *
FROM (
SELECT
s.value,
rn = CONCAT('Remarks', ROW_NUMBER() OVER (ORDER BY (SELECT NULL)))
FROM STRING_SPLIT(t.Remarks, '|') s
WHERE s.value <> ''
) s
PIVOT (
MAX(value) FOR (rn IN
(Remarks1, Remarks2, Remarks3, Remarks4)
) p
) Remarks;

最新更新