我从这里的某人那里得到了这个函数:
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子句中,我像这样调用这种类型的函数:
WHERE u.[Fleet] IN (SELECT [VALUE] FROM dbo.udf_GenerateVarcharTableFromStringList(@Fleets, ',')) 如何以类似的方式调用上述函数?
谢谢!
发布于 2010-09-09 00:42:53
您可能希望将值替换为s。
发布于 2010-09-09 00:55:39
因为你说的结果是:
SELECT * FROM dbo.fnSplitString('abc,def', ',')是正确的,那么很可能一切都应该正常工作。检查当您有一个空标记(两个相邻的逗号)时会发生什么,并查看结果是否如您所预期的那样。
此外,我注意到输入字符串的长度有一个有效的限制。检查以确保没有任何东西被切断。
发布于 2010-09-09 00:59:31
该函数不会删除前导/尾随空格,因此如果你有一个字符串'a,b,c‘和一个分隔符',’,你会得到一个包含'a',‘b',’c‘的表。这在您的u.Fleet中是否匹配
https://stackoverflow.com/questions/3669973
复制相似问题