Сценарий или функция T-SQL, которые получат выбранные значения из строки, разделенной запятой - PullRequest
0 голосов
/ 22 февраля 2010

Если у меня есть строка со значениями, такими как A, B, C, D, E, F, и я хотел удалить последнюю запятую, есть ли функция или сценарий, которые я могу использовать для этого?

Ответы [ 2 ]

2 голосов
/ 22 февраля 2010

В приведенном ниже примере будет обрезан последний символ строки, но все равно, запятая это или нет

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

SELECT LEFT(@s, LEN(@s)-1)
0 голосов
/ 22 февраля 2010

Если я правильно понимаю ваш дополнительный вопрос, полагаю, вы хотите заархивировать что-то вроде следующего ...

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» - это означает, что вы можете затем передать строку с разделителями-запятыми и использовать ее для фильтрации другой таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...