T-SQL脚本或函数,它将从逗号分隔的字符串中获取选定的值

时间:2010-02-22 16:05:01

标签: sql-server-2005 tsql

如果我有一个字符串,其中包含A,B,C,D,E,F等值,并且我想删除最后一个逗号,是否有可用于执行此操作的函数或脚本?

2 个答案:

答案 0 :(得分:2)

以下示例将修剪字符串的最后一个字符,但不关心它是否为逗号

DECLARE @s VARCHAR(50)
SET @s = 'a,b,'

SELECT LEFT(@s, LEN(@s)-1)

答案 1 :(得分:0)

如果我正确理解你的其他问题,我相信你想存档如下的内容......

DECLARE @b TABLE
    (
        [stuff] VARCHAR(2)
    )

INSERT INTO @b VALUES('c')

DECLARE @s VARCHAR(MAX)
SET @s = 'a,b,c'

SELECT [stuff]
FROM @b b
INNER JOIN dbo.list(@s) lst
    ON lst.val = b.[stuff]

CREATE function [dbo].[list] ( @list VARCHAR(MAX) )
RETURNS @list_table TABLE ([val] VARCHAR(20))
AS
BEGIN
    DECLARE @index INT,
            @start_index INT,
            @val VARCHAR(20)

    SELECT @index = 1 
    SELECT @start_index = 1
    WHILE @index <= DATALENGTH(@list)
    BEGIN

        IF SUBSTRING(@list,@index,1) = ','
        BEGIN

            SELECT @val = SUBSTRING(@list, @start_index, @index - @start_index )
            INSERT @list_table ([val]) VALUES (@val)
            SELECT @start_index = @index + 1
        END
        SELECT @index  = @index + 1
    END
    SELECT @val = SUBSTRING(@list, @start_index, @index - @start_index )
    INSERT @list_table ([val]) VALUES (@val)
    RETURN
END

该函数只是将输入字符串拆分为表中带有“val”列的行 - 这意味着您可以传入逗号分隔的字符串并使用它来过滤另一个表。