Split string en Transact Sql Server

Función para convertir una cadena con elementos separados por un símbolo de separación (por ej. ‘,’) en una tabla. Funciona como el String.Split() de .NET.

Siempre he echado de menos un split para T-sql. Pues nada, la pongo aquí por si a alguien le interesa copiarla en lugar de implementar una nueva.

La verdad es que no he probado todavía Sql Server 2012, es posible que Microsoft ya la haya implementado nativamente.

CREATE FUNCTION [dbo].[StringSplit]
(
    @String AS VARCHAR(2048),
    @Separator AS CHAR(1),
    @Count AS INT
)
RETURNS TABLE
AS
RETURN
(
  SELECT TOP (ISNULL(@Count, 2147483647))
    SUBSTRING(
        @String,
        Number,
        CHARINDEX(@Separator, @String + @Separator, Number) - Number
        ) AS [Substring]
  FROM
    master..spt_values
  WHERE
    [Type]='P'
    AND Number BETWEEN 1 AND LEN(@String) + 1
    AND SUBSTRING(@Separator + @String, Number, 1) = @Separator
)

No necesita mucho comentario, 3 parametros de entrada:

  1. Cadena. Contiene los elementos separados por un caracter, por ej: los números de la lotería con los que Hugo, uno de los protagonistas de perdidos, ganó el premio gordo,  separados por comas (4,8,15,16,23,48).
  2. Caracter separador: En este caso la coma. (‘,’)
  3. Numero máximo de caracteres que queremos obtener, si se omite no pasa nada.

Consulta:

select * from StringSplit('4,8,15,16,23,48',',', null)

Resultado:

StringSplitAhora es más fácil ganar la lotería.

Esta entrada fue publicada en SQL Server, Transact SQL y etiquetada , , . Guarda el enlace permanente.

Una respuesta a Split string en Transact Sql Server

  1. Marcos dijo:

    Buena solución.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *