导读:1、SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组 2、自己来实现 CREATE FUNCTION udf_Split ( @Words nvarchar( MAX )/*原始字串*/ ,@splitStr varchar (50) /*分割字元*/ ) RE
1、SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组
2、自己来实现
|
CREATE FUNCTION udf_Split
( @Words nvarchar( MAX )/*原始字串*/
,@splitStr varchar (50) /*分割字元*/
)
RETURNS @Result_Table TABLE
? ? ? ?(
? ? ? ? ?[word] nvarchar( max ) NULL /*定义一个word列*/
? ? ? ?)
BEGIN
? ? Declare @TempStr nvarchar( MAX )
? ? /*@Words有包含分割字元就一直执行回圈*/
? ? WHILE (CHARINDEX(@splitStr,@Words)>0)
? ? BEGIN
? ?
/*取出最前面的word*/
? ? ? ? Set @TempStr= SUBSTRING (@Words,1,CHARINDEX(@splitStr,@Words)-1)
? ? ? ? Insert into @Result_Table (word) Values ??(@TempStr)
? ? ? ? /*把最前面的word加上分割字元后,取代为空字串再指派回给@Words*/
? ? ? ? Set @Words = REPLACE (@Words,@TempStr+@splitStr,'' )
? ? END /* End While*/
? ? /*@Words有值但没有分割字元,表示此为最后一个word*/
? ? IF(LEN(RTRIM(LTRIM(@Words)))>0 And CHARINDEX(@splitStr,RTRIM(LTRIM(@Words)))=0)?
? ? Begin
? ? ? ? Set @TempStr=@Words /*取出word*/
? ? ? ? ?
? ? ? ? Insert into @Result_Table (word) Values ??(@TempStr)
? ? ? ? ?
? ? End /* End IF*/
?
? ?RETURN /*回传table 变数*/
END
3、调用
Select?
*?
from?
dbo.udf_Split(N?'Hello,World,Shadow,你好'?
,?
','?
)
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!