jueves, 14 de abril de 2011

Función Recursiva SPLIT , transformar una cadena de texto separada por un caracter (ej coma) en una tabla

Por medio de la sig. función (del tipo recursiva) podemos transformar una cadena de texto en tabla, ej:


Declare @stringtest as varchar(8000)

set @stringtest ='1,2,3,4,5,6,7,8,9'

Select * from [dbo].[Split_returns_Table](@stringtest,',')

RESULTADO:

Id
--
1
2
3
4
5
6
7
8
9

(9 row(s) affected)

FUNCION:

CREATE FUNCTION [dbo].[Split_returns_Table]  
(  
  @Id        varchar(8000),  
  @Separador varchar(8)   --= ','  
)  
RETURNS TABLE  

AS  
RETURN  
(  
  WITH SplitETC (Inicio, Fin)  
    AS  
  (  
       SELECT 1,  
              CHARINDEX(@Separador, @Id)  
    UNION ALL  
       SELECT Fin + LEN(@Separador),  
              CHARINDEX(@Separador, @Id, Fin + LEN(@Separador))  
         FROM SplitETC  
        WHERE Fin > 0  
  )  
  SELECT RTRIM(LTRIM(SUBSTRING(@Id, Inicio, Largo))) Id  
    FROM (SELECT Inicio,  
                 CASE WHEN Fin IS NULL OR Fin = 0 THEN  
                     LEN(@Id) + 1  
                 ELSE  
                     Fin  
                 END  - Inicio  AS Largo  
            FROM SplitETC /*OPTION (MAXRECURSION 0) */) AS Split  
)


No hay comentarios:

Publicar un comentario