提取两个字符(逗号)之间的子字符串

时间:2019-11-27 15:28:47

标签: sql sql-server

我需要从用逗号分隔的字符串中提取代码。

我已经找到了如何提取第一个代码的方法,但是我一直在努力寻找如何提取后续代码的方法。

示例字符串:

~R10.4,T85.8,Y83.8,I10X,I25.9,E10.9,Z95.5,Z93.2,Z88.0

查询:

select code_string, substring(code_string, 0, charindex(',',code_string)) as first
FROM TABLE

返回:

~R10.4

我现在需要提取后续代码

~R10.4
T85.8
Y83.8
I10X
etc.

任何帮助将不胜感激

如果可能的话,我宁愿不必创建一个函数

2 个答案:

答案 0 :(得分:1)

我猜您正在使用SQL Server,以便可以使用

SELECT value FROM
STRING_SPLIT('~R10.4,T85.8,Y83.8,I10X,I25.9,E10.9,Z95.5,Z93.2,Z88.0', ',');

答案 1 :(得分:0)

我想分享我的解决方案

;WITH Split_Field (CODE_STRING, xmlname)
AS
(
    SELECT 
    CODE_STRING,
    CONVERT(XML,'<Names><name>'  
    + REPLACE(CODE_STRING,',', '</name><name>') + '</name></Names>') AS xmlname
      FROM 
(
Select cast('~I20.9,I10X,E78.0,H81.0,K90.0,M81.9,M19.9,Z86.7' as nvarchar(MAX)) 
/*replace with your code field*/ as CODE_STRING

--from table 

) as A

)

SELECT 
CODE_STRING, 
xmlname.value('/Names[1]/name[1]','varchar(100)') AS Col1,    
xmlname.value('/Names[1]/name[2]','varchar(100)') AS Col2,
xmlname.value('/Names[1]/name[3]','varchar(100)') AS Col3,
xmlname.value('/Names[1]/name[4]','varchar(100)') AS col4,
xmlname.value('/Names[1]/name[5]','varchar(100)') AS col5
FROM Split_Field