Mes recherches Google sur la façon de découper une chaîne sur un delimiter ont donné lieu à certaines fonctions utiles pour les chaînes de fractionnement lorsque la chaîne est connue (voir ci-dessous):SQL 2005 de Split séparées par des virgules Colonne sur Délimiteur
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
Cela fonctionne bien pour une chaîne connue comme:
SELECT TOP 10 * FROM dbo.Split('This,Is,My,List',',')
Cependant, je voudrais passer une colonne à une fonction, et avoir en même temps que mes filles fusionnées d'autres données dans sa propre ligne ... par exemple compte tenu des données :
CommaColumn ValueColumn1 ValueColumn2
----------- ------------ -------------
ABC,123 1 2
XYZ, 789 2 3
Je voudrais écrire quelque chose comme:
SELECT Split(CommaColumn,',') As SplitValue, ValueColumn1, ValueColumn2 FROM MyTable
Et retourner
SplitValue ValueColumn1 ValueColumn2
---------- ------------ ------------
ABC 1 2
123 1 2
XYZ 2 3
789 2 3
Est-ce possible, ou quelqu'un at-il fait cela avant?
99% du temps ou plus les colonnes séparées par des virgules sont le résultat d'une mauvaise base de données desi gn en premier lieu. Le seul endroit pour une fonction de split au niveau du serveur est de refactoriser ces colonnes dans leur propre table. –
J'espère que cette table provient de votre base de données intermédiaire et qu'elle contient des données brutes provenant d'un système propriétaire dans lequel vous n'avez aucun moyen de modifier la disposition de la table. – VVS