我有这个参数
@ID varchar = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'
我想做一些事情来拆分逗号分隔的值。
string_split
功能不起作用,我收到此错误:
STRING_SPLIT 函数仅在兼容级别 130 下可用
我尝试更改我的数据库并将兼容性设置为 130,但我没有此更改的权限。
原文由 Moh 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有这个参数
@ID varchar = '1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20'
我想做一些事情来拆分逗号分隔的值。
string_split
功能不起作用,我收到此错误:
STRING_SPLIT 函数仅在兼容级别 130 下可用
我尝试更改我的数据库并将兼容性设置为 130,但我没有此更改的权限。
原文由 Moh 发布,翻译遵循 CC BY-SA 4.0 许可协议
谢谢你 al3x-m 。我创建了这个函数,以便在很多时候重复使用。
CREATE FUNCTION STRING_SPLIT_POLYFILL2016 (
@string NVARCHAR(4000)
,@separator NVARCHAR(4000)
)
RETURNS @T TABLE (ColName VARCHAR(4000))
AS
BEGIN
/*
pitt phunsanit
polyfill of STRING_SPLIT in SQL Server 2016
https://learn.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql?view=sql-server-ver15
https://stackoverflow.com/questions/46902892/string-split-in-sql-server-2012
*/
DECLARE @Number VARCHAR(4000);
SET @string = @string + @separator;
WHILE CHARINDEX(@separator, @string) > 0
BEGIN
SET @Number = SUBSTRING(@string, 0, CHARINDEX(@separator, @string));
SET @string = SUBSTRING(@string, CHARINDEX(@separator, @string) + 1, LEN(@string));
INSERT INTO @T (ColName)
VALUES (@Number)
END
RETURN
END
-- 演示
DECLARE @IDS NVARCHAR(4000)
SET @IDS = "pitt,phunsanit,01,02,03,4,5,6,7,8,9,10,พิชญ์,พันธุ์สนิท"
SELECT *
FROM STRING_SPLIT_POLYFILL2016(@IDS, ",")
原文由 phunsanit 发布,翻译遵循 CC BY-SA 4.0 许可协议
其他方法是使用
XML
方法和CROSS APPLY
来拆分逗号分隔数据:结果 :
例子 :