多年来,我们一直使用以下函数来拆分传递给存储过程的 CSV 字符串。(抱歉,如果它不是最现代、最优雅或最有效的方式,但它对我们的目的很有效)
CREATE FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20) = ' ')
RETURNS @Strings TABLE
(
position int IDENTITY,
value varchar(8000)
)
AS
BEGIN
DECLARE @index int
SET @index = -1
SET @text = LTRIM(RTRIM(@text))
WHILE (LEN(@text) > 0)
BEGIN
SET @index = CHARINDEX(@delimiter , @text)
IF (@index = 0) AND (LEN(@text) > 0)
BEGIN
INSERT INTO @Strings VALUES (@text)
BREAK
END
IF (@index > 1)
BEGIN
INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
ELSE
SET @text = RIGHT(@text, (LEN(@text) - @index))
END
RETURN
END
在使用它是:
select value from dbo.fn_Split('string1,string2,string3',',')
(哦,这是一个 MS SQL Server 数据库顺便说一句)