Meine Google-Suchen auf, wie eine Zeichenfolge auf einem Trennzeichen aufgeteilt hat in einigen nützlichen Funktionen für das Aufspalten Strings ergibt, wenn die Zeichenfolge bekannt sind (dh siehe unten):SQL 2005 Split Comma Separated Spalte auf Delimiter
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
das funktioniert gut für einen bekannten String wie:
SELECT TOP 10 * FROM dbo.Split('This,Is,My,List',',')
Allerdings würde Ich mag eine Spalte an eine Funktion zu übergeben, und haben es mit meinen anderen Daten in einem eigenen Zeile unioned zusammen ... zum Beispiel angesichts der Daten :
CommaColumn ValueColumn1 ValueColumn2
----------- ------------ -------------
ABC,123 1 2
XYZ, 789 2 3
Ich möchte so etwas wie schreiben:
SELECT Split(CommaColumn,',') As SplitValue, ValueColumn1, ValueColumn2 FROM MyTable
Und zurück
SplitValue ValueColumn1 ValueColumn2
---------- ------------ ------------
ABC 1 2
123 1 2
XYZ 2 3
789 2 3
Ist das möglich erhalten, oder hat, bevor jemand dies getan?
99% der Zeit oder Mehr Kommas getrennte Spalten sind ein Ergebnis schlechter Datenbankdesi gn an erster Stelle. Die einzige Stelle für eine Split-Funktion auf Serverebene ist das Refactoring dieser Spalten in ihre eigene Tabelle. –
Ich hoffe, dass diese Tabelle von Ihnen Staging-Datenbank ist und Rohdaten von einem proprietären System enthält, wo Sie keine Möglichkeit haben, das Tabellenlayout zu ändern? – VVS