Tengo un varchar @ a = 'a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p', que tiene | valores delimitados Quiero dividir esta variable en una matriz o una tabla. ¿Alguien tiene alguna idea al respecto?¿Cómo dividir una cadena en T-SQL?
Respuesta
Utilice una función con valores de tabla como esta,
CREATE FUNCTION Splitfn(@String varchar(8000), @Delimiter char(1))
returns @temptable TABLE (items varchar(8000))
as
begin
declare @idx int
declare @slice varchar(8000)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
return
end
y conseguir que su variable y utilizar esta función como esta,
SELECT i.items FROM dbo.Splitfn(@a,'|') AS i
+1 para el delimitador que pasa ... –
-1 para usar un bucle – gbn
@gbn hace que la tabla de números se ejecute más rápido que un bucle ... Por favor, explique un poco más ... –
En general, esta es una pregunta tan común aquí
Voy a dar la respuesta común: Arrays and Lists in SQL Server 2005 and Beyond por Erland Sommarskog
Yo recomendaría un table of numbers, no un bucle, para uso general.
Quizás podría mejorar el answe r explicando cómo aplicar este método para dividir un texto en cada delimitador. =) – jumxozizi
prueba este:
declare @a varchar(10)
set @a = 'a|b|c|'
while len(@a) > 1
begin
insert into #temp
select substring(@a,1,patindex('%|%',@a)-1);
set @a = substring(@a,patindex('%|%',@a)+1,len(@a))
end;
Buena solución, pero hay que aclarar: es importante que la cadena finalice con el símbolo del delimitador. Si no lo hace, caerá en el ciclo infinito –
mi extensión a su solución es agregar esta cláusula después de su fila "set @a": IF (patindex ('% |%', @ a) = 0) COMIENZO INSERT INTO #temp select @a; \t BREAK; END; –
Aquí es una solución basada en XML alternativa. Parece tener un rendimiento similar al de la solución Splitfn().
Esto convierte varchar a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p
en XML <a>a</a><a>b</a><a>c</a><a>d</a><a>e</a><a>f</a><a>g</a><a>h</a><a>i</a><a>j</a><a>k</a><a>l</a><a>m</a><a>n</a><a>o</a><a>p</a>
y extrae el valor de cada nodo XML <a>
.
declare @a varchar(max);
set @a = 'a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p';
declare @xml xml;
set @xml
= '<a>'+replace(replace(replace(@a,'&','&'),'<','<'),'|','</a><a>')+'</a>';
SELECT x.n.value('.','VARCHAR(1)') AS singleValue
FROM @xml.nodes('/a') AS x(n)
;
- 1. ¿Cómo dividir una cadena en una lista?
- 2. Dividir una cadena en pares
- 3. dividir una cadena en Python
- 4. ¿Cómo dividir una cadena por una cadena en Scala
- 5. ¿Cómo puedo dividir una cadena en CSH?
- 6. cómo dividir una cadena en javascript
- 7. ¿Cómo dividir una cadena en Haskell?
- 8. ¿Cómo puedo dividir una cadena en make?
- 9. dividir una cadena en mayúsculas
- 10. cómo dividir cadena en NSMutableArray
- 11. Dividir una cadena en una cadena, no un carácter
- 12. ¿Cómo dividir una cadena separada por comas?
- 13. C# Dividir una cadena por otra cadena
- 14. dividir una cadena en un separador
- 15. Dividir una cadena en 2 en Python
- 16. dividir una cadena usando javascript
- 17. Dividir una cadena Java con '.'
- 18. Cómo dividir una cadena en una matriz 2D con Regex?
- 19. ¿Cómo dividir una cadena en subcadenas de una longitud determinada?
- 20. ¿Cómo puedo dividir una cadena con un delimitador de cadena?
- 21. dividir una cadena en diferentes cadenas
- 22. Dividir una cadena en palabras y puntuación
- 23. Dividir una cadena en dos partes
- 24. ¿Cómo dividir una cadena CamelCase en sus subcadenas en Ruby?
- 25. ¿Cómo dividir una cadena en tokens en C?
- 26. Cómo dividir una cadena en matriz en PostScript
- 27. Cómo dividir la cadena en delphi
- 28. dividir cadena en el índice
- 29. cómo dividir cadena en serie como enteros
- 30. PHP: dividir cadena
http://stackoverflow.com/questions/314824/t-sql-opposite-to-string-concatenation-how-to-split-string-into-multiple-recor, http: // stackoverflow. com/questions/697519/split-function-equivalent-in-tsql –
posible duplicado de http://stackoverflow.com/questions/2647/split-string-in-sql –