我从这里有人那里得到了这个功能:
create FUNCTION [dbo].[fnSplitString] (@s varchar(512),@sep char(1))
RETURNS table
AS
RETURN (
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@sep, @s)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1)
FROM Pieces
WHERE stop > 0
)
SELECT pn,
SUBSTRING(@s, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces
)
通常在sprocs的子句中我称之为这种类型的函数:
WHERE u.[Fleet] IN (SELECT [VALUE] FROM dbo.udf_GenerateVarcharTableFromStringList(@Fleets, ','))
如何以类似的方式调用上述功能?
谢谢!
答案 0 :(得分:3)
您希望将[value]替换为[s]。
答案 1 :(得分:1)
既然你说的结果是:
SELECT * FROM dbo.fnSplitString('abc,def', ',')
是正确的,那么一切都应该有效。检查当您有一个空令牌(两个相邻的逗号)时会发生什么,并查看结果是否符合您的预期。
另外,我注意到输入字符串的长度有效限制。检查以确保没有任何东西被切断。
答案 2 :(得分:0)
该函数不会删除前导/尾随空格,因此如果您有一个字符串'a,b,c'和一个分隔符','您将获得一个包含'a','b','c'的表格。这与你的匹配。[Fleet]?