为了账号安全,请及时绑定邮箱和手机立即绑定

T-SQL拆分字符串

T-SQL拆分字符串

呼啦一阵风 2019-05-27 15:41:57
T-SQL拆分字符串我有一个SQL Server 2008 R2列包含一个字符串,我需要用逗号分隔。我在StackOverflow上看到了很多答案,但它们都不适用于R2。我确保我对任何拆分函数示例都有选择权限。任何帮助非常感谢。
查看完整描述

4 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

我之前使用过这个SQL可能对你有用: -

CREATE FUNCTION dbo.splitstring ( @stringToSplit VARCHAR(MAX) )RETURNS @returnList TABLE ([Name] [nvarchar] (500))ASBEGIN

 DECLARE @name NVARCHAR(255)
 DECLARE @pos INT WHILE CHARINDEX(',', @stringToSplit) > 0
 BEGIN
  SELECT @pos  = CHARINDEX(',', @stringToSplit)  
  SELECT @name = SUBSTRING(@stringToSplit, 1, @pos-1)

  INSERT INTO @returnList 
  SELECT @name  SELECT @stringToSplit = SUBSTRING(@stringToSplit, @pos+1, LEN(@stringToSplit)-@pos)
 END

 INSERT INTO @returnList SELECT @stringToSplit RETURNEND

并使用它: -

SELECT * FROM dbo.splitstring('91,12,65,78,56,789')


查看完整回答
反对 回复 2019-05-27
?
Helenr

TA贡献1780条经验 获得超4个赞

最简单的方法是使用XML格式。


1.将字符串转换为不带表的行


QUERY


DECLARE @String varchar(100) = 'String1,String2,String3'

-- To change ',' to any other delimeter, just change ',' to your desired one

DECLARE @Delimiter CHAR = ','    


SELECT LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'Value' 

FROM  

(     

     SELECT CAST ('<M>' + REPLACE(@String, @Delimiter, '</M><M>') + '</M>' AS XML) AS Data            

) AS A 

CROSS APPLY Data.nodes ('/M') AS Split(a)

结果


 x---------x

 | Value   |

 x---------x

 | String1 |

 | String2 |

 | String3 |

 x---------x

2.从表中转换为具有每个CSV行的ID的行


消息表


 x-----x--------------------------x

 | Id  |           Value          |

 x-----x--------------------------x

 |  1  |  String1,String2,String3 |

 |  2  |  String4,String5,String6 |     

 x-----x--------------------------x

QUERY


-- To change ',' to any other delimeter, just change ',' before '</M><M>' to your desired one

DECLARE @Delimiter CHAR = ','


SELECT ID,LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'Value' 

FROM  

(     

     SELECT ID,CAST ('<M>' + REPLACE(VALUE, @Delimiter, '</M><M>') + '</M>' AS XML) AS Data            

     FROM TABLENAME

) AS A 

CROSS APPLY Data.nodes ('/M') AS Split(a)

结果


 x-----x----------x

 | Id  |  Value   |

 x-----x----------x

 |  1  |  String1 |

 |  1  |  String2 |  

 |  1  |  String3 |

 |  2  |  String4 |  

 |  2  |  String5 |

 |  2  |  String6 |     

 x-----x----------x


查看完整回答
反对 回复 2019-05-27
  • 4 回答
  • 0 关注
  • 1193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信