Kim Torgersen


T-SQL, Split String


Funktion för att separera mindre texter.

Mycket användbar, iallafall för mig, då jag ofta har en situation då jag behöver hantera (kortare) kommaseparerade listor.

Från SQL Server 2016 finns den inbyggda funktionen STRING_SPLIT(), men den saknar ordningen på fragmenten, vilket hindrar den från att vara ett alternativ i alla lägen.

CREATE FUNCTION Util.String_Split (
  @Text varchar(MAX),
  @Delimiter varchar(MAX)
)
RETURNS @Table TABLE (
  Id int IDENTITY,
  Txt varchar(MAX)
)
AS
BEGIN

  WHILE CHARINDEX(@Delimiter, @Text) <> 0
  BEGIN

    INSERT INTO @Table
    (
      Txt
    )
    SELECT
      NULLIF(
        SUBSTRING(@Text, 0, CHARINDEX(@Delimiter, @Text)),
        ''
      );

    SELECT
      @Text = NULLIF(
        SUBSTRING(
          @Text,
          CHARINDEX(@Delimiter, @Text) + LEN(@Delimiter),
          LEN(@Text)
        ),
        ''
      );
  END;

  INSERT INTO @Table
  (
    Txt
  )
  VALUES
    (@Text);

  RETURN;

END;