SQLserver 中没有内置的split函数,需要自己构建一个表值函数,具体代码如下:
----------下面方法是以“,”来分割字符串
CREATE FUNCTION [dbo].[Split](@separator VARCHAR(64)=',',@string NVARCHAR(max))
RETURNS @ResultTab TABLE (
Id INT ,
Res NVARCHAR(500)
)
AS
BEGIN
DECLARE @Num INT
IF(@string IS NOT NULL AND @string <> '' AND LEN(@string)>0)
BEGIN
IF(CHARINDEX(@separator,@string)>0) --判断要截取的字符是否存在
BEGIN
SET @Num=0
WHILE (CHARINDEX(@separator,@string)>0) --如果要截取的字符存在,就继续循环
BEGIN
SET @Num=@Num+1
INSERT INTO @ResultTab(Id,Res) --截取字符串,插入表变量
SELECT @Num,LEFT(@string,CHARINDEX(@separator,@string)-1)
--把已经截取并插入的字符串删除
SET @string=STUFF(@string,1,CHARINDEX(@separator,@string)-1+LEN(@separator),'')
END
--如果最后一个截取的字符串为空,那就不插入了
--例如:'0123,0456,0789,' 这样的字符串最后剩下的就是空字符串了
IF(@string IS NOT NULL AND @string <> '')
BEGIN
INSERT INTO @ResultTab(Id,Res)
SELECT @Num+1,@string
END
END
ELSE
BEGIN
INSERT INTO @ResultTab(Id,Res) SELECT 1,@string
END
END
ELSE
BEGIN
DELETE FROM @ResultTab
END
RETURN
END
例如:使用“,”分割字符串 "001,002,003,004"
SQL语句:select * from [Split](',','001,002,003,004');
结果:

————————————————
版权声明:本文为优快云博主「feitiandezhu1399」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/feitiandezhu1399/article/details/87342026
SQLserver创建自定义表值函数实现字符串分割
本文介绍了在SQLserver中由于没有内置的split函数,如何自定义一个表值函数`[dbo].[Split]`来实现以特定字符分割字符串的功能。通过示例代码展示了如何使用该函数,并给出了使用示例:`select * from [Split](',', '001,002,003,004')`,结果返回被分割的每个字符串项。
1975

被折叠的 条评论
为什么被折叠?



