sql >> Database teknologi >  >> Database Tools >> SSMS

Opdeling af kommaseparerede værdier

Du kan oprette en brugerdefineret UDF som den, der er vist nedenfor. Indsæt derefter den kommaseparerede liste fra en anden forespørgsel, og den vil returnere en tabel med hver værdi i en separat række.

CREATE FUNCTION [dbo].[fnSplitStringAsTable] 
(
    @inputString varchar(MAX),
    @delimiter char(1) = ','
)
RETURNS 
@Result TABLE 
(
    Value varchar(MAX)
)
AS
BEGIN
    DECLARE @chIndex int
    DECLARE @item varchar(100)

    -- While there are more delimiters...
    WHILE CHARINDEX(@delimiter, @inputString, 0) <> 0
        BEGIN
            -- Get the index of the first delimiter.
            SET @chIndex = CHARINDEX(@delimiter, @inputString, 0)

            -- Get all of the characters prior to the delimiter and insert the string into the table.
            SELECT @item = SUBSTRING(@inputString, 1, @chIndex - 1)

            IF LEN(@item) > 0
                BEGIN
                    INSERT INTO @Result(Value)
                    VALUES (@item)
                END

            -- Get the remainder of the string.
            SELECT @inputString = SUBSTRING(@inputString, @chIndex + 1, LEN(@inputString))
        END

    -- If there are still characters remaining in the string, insert them into the table.
    IF LEN(@inputString) > 0
        BEGIN
            INSERT INTO @Result(Value)
            VALUES (@inputString)
        END

    RETURN 
END


  1. SSMS 2012 Intellisense-adfærd

  2. For mange parameterværdier gør forespørgslen langsommere

  3. Kodningsfejl med polsk tegnsæt under overførsel af database-/serveropsætning

  4. phpMyAdmin-adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:NEJ)