My Google búsquedas en cómo dividir una cadena en un delimitador han dado lugar a algunas funciones útiles para la división de cadenas cuando se conoce la secuencia (es decir, véase más adelante):SQL 2005 Dividir por comas Columna Separado En el delimitador
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[Split] (@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
esto funciona bien para una cadena conocido como:
SELECT TOP 10 * FROM dbo.Split('This,Is,My,List',',')
Sin embargo, me gustaría pasar una columna a una función, y lo han unioned junto con mis otros datos en su propia fila ... por ejemplo, dados los datos :
CommaColumn ValueColumn1 ValueColumn2
----------- ------------ -------------
ABC,123 1 2
XYZ, 789 2 3
me gustaría escribir algo como:
SELECT Split(CommaColumn,',') As SplitValue, ValueColumn1, ValueColumn2 FROM MyTable
y volver
SplitValue ValueColumn1 ValueColumn2
---------- ------------ ------------
ABC 1 2
123 1 2
XYZ 2 3
789 2 3
Es esto posible, o alguien ha hecho esto antes?
99% de las veces o más columnas separadas por comas son el resultado de una mala desi gn en primer lugar. El único lugar para una función dividida en el nivel del servidor es refactorizar esas columnas en su propia tabla. –
Espero que esta tabla sea de su base de datos provisional y contenga datos brutos de un sistema propietario donde no tiene forma de cambiar el diseño de la tabla. – VVS