Hola tengo una entrada comodividir una cadena en caracteres individuales en SQL Server 2005
ID data
1 hello
2 sql
siendo la salida deseada
ID RowID Chars
1 1 H
1 2 e
1 3 l
1 4 l
1 5 o
2 1 s
2 2 q
2 3 l
Mi enfoque en lo que va siendo
Declare @t table(ID INT IDENTITY , data varchar(max))
Insert into @t Select 'hello' union all select 'sql'
--Select * from @t
;With CteMaxlen As(
Select MaxLength = max(len(data)) from @t)
, Num_Cte AS
(
SELECT 1 AS rn
UNION ALL
SELECT rn +1 AS rn
FROM Num_Cte
WHERE rn <(select MaxLength from CteMaxlen)
)
-- Shred into individual characters
, Get_Individual_Chars_Cte AS
(
SELECT
ID
,Row_ID =ROW_NUMBER() Over(PARTITION by ID Order by ID)
,chars
FROM @t,Num_Cte
CROSS APPLY(SELECT SUBSTRING((select data from @t),rn,1) AS chars) SplittedChars
)
Select * from Get_Individual_Chars_Cte
El consulta no funciona en absoluto con una excepción que es
Msg 512, nivel 16, estado 1, línea 4
Subconsulta devolvió más de 1 valor. Esto no está permitido cuando la subconsulta sigue =,! =, <, < =,>,> = o cuando la subconsulta se usa como una expresión .
Editar:
he encontrado mi respuesta
;with Get_Individual_Chars_Cte AS
(
SELECT
ID,
Row_ID =ROW_NUMBER() Over(PARTITION by ID Order by ID)
,SUBSTRING(Data,Number,1) AS [Char]--,
FROM @t
INNER JOIN master.dbo.spt_values ON
Number BETWEEN 1 AND LEN(Data)
AND type='P'
)
Select * from Get_Individual_Chars_Cte
Ayuda necesaria
De hecho, me respondidos a mi propia pregunta en la parte de edición mencionado en teh cuerpo cuestionado desde que estoy teniendo menos de puntos de reputación. Pero gracias por la respuesta y aceptaré la tuya, pero la mía también está funcionando bien. Lo solicito, ya que tiene más reputación, ¿es posible que saque mi respuesta y pegue la respuesta? Si es así, haga lo necesario si siente que mi respuesta es tan correcta como la suya. – aditi
@aditi - Debería poder responder sus propias preguntas. Puede haber un límite de tiempo (¿8 horas?) Para usuarios con un representante menor de 100. No puedo encontrarlo en las preguntas frecuentes pero recuerdo haber leído sobre eso. Puedes ** aceptar ** tu propia respuesta después de 48 horas. –