Sql server 拆分部分数量未知的字符串列表,并将其作为表返回
我需要在sql中用斜杠符号解析字符串。我的价值观如下:Sql server 拆分部分数量未知的字符串列表,并将其作为表返回,sql-server,Sql Server,我需要在sql中用斜杠符号解析字符串。我的价值观如下: 0041/PH 5PC0000001/WCHTKSKHDS0/D 我想在一列中有0041,在第二列中,我想在第三列中有ph5pc000001和WCHTKSKHDS0,以此类推。但是,斜杠不是常量,在某些行中斜杠更多,在某些行中斜杠更少例如:像这样 PH/HCGA/002878//HTJ/, 0004/PH 5DI0000001/LTRKARDR/M /L. 提前感谢您的帮助。像这样尝试: DECLARE @inpTbl TABLE(
0041/PH 5PC0000001/WCHTKSKHDS0/D
我想在一列中有0041,在第二列中,我想在第三列中有ph5pc000001和WCHTKSKHDS0,以此类推。但是,斜杠不是常量,在某些行中斜杠更多,在某些行中斜杠更少例如:像这样
PH/HCGA/002878//HTJ/, 0004/PH 5DI0000001/LTRKARDR/M /L.
提前感谢您的帮助。像这样尝试:
DECLARE @inpTbl TABLE(inpString VARCHAR(100));
INSERT INTO @inpTbl VALUES ('0041/PH 5PC0000001/WCHTKSKHDS0/D')
,('PH/HCGA/002878//HTJ/')
,('0004/PH 5DI0000001/LTRKARDR/M /L');
WITH ConvertToXMLLikeStrings AS
(
SELECT CAST('<x>' + REPLACE(inpString,'/','</x><x>') + '</x>' AS XML) AS MyData
FROM @inpTbl AS it
)
SELECT MyData.value('x[1]','varchar(max)') AS Val1
,MyData.value('x[2]','varchar(max)') AS Val2
,MyData.value('x[3]','varchar(max)') AS Val3
,MyData.value('x[4]','varchar(max)') AS Val4
,MyData.value('x[5]','varchar(max)') AS Val5
,MyData.value('x[6]','varchar(max)') AS Val6
--add as many as you need
FROM ConvertToXMLLikeStrings;
呃,你这里有一堆乱七八糟的数据要处理。首先,您必须将这些分隔值解析为行。然后,您必须创建一个动态透视,将数据放回动态数量的列中。@SeanLange,我认为它没有那么复杂…@Shnugo实际上是这样的。您使用XML进行了拆分,但最后的列数是动态的。@SeanLange,是的,您当然是对的。由于我们不知道零件的最大数量,这可能是一个问题。但我认为,有一个最大的数字可以“硬编码”…这是伟大的工作,直到有一个Val7的需要。这就是为什么我在这里说它需要是动态的。无论如何,这得到了一个+1作为分割分隔值的可靠示例。是否有任何函数我可以用来解析,所以我不必手动输入,而是自动解析整列中的字符串?@Mr.Singh请解释您想要什么。。。在视图或内嵌TVF中打包这种方法非常容易。如果你需要帮助,请让我知道,如果问题解决了,请勾选投票柜台下方的接受检查,我有超过千行不同的字符串,我无法将所有这些字符串放在一个@inpTbl中。有没有其他方法可以使用某种循环或函数,我只需输入列名,然后输入解析字符串的函数或循环?@Mr.Singh,没有,您不必在
@inpTbl
中输入任何内容。这只是为了展示一个测试用例。您不必做更多的事情,只需从开始;使用Convert…
(在前面设置分号),将中的@inpTbl
更改为实际表名,将inpString
更改为保存这些值的列名。。。
Val1 Val2 Val3 Val4 Val5 Val6
0041 PH 5PC0000001 WCHTKSKHDS0 D NULL NULL
PH HCGA 002878 HTJ
0004 PH 5DI0000001 LTRKARDR M L NULL