亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 1224 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號