J'ai un Comment puis-je faire cela? P> varchar @ A = 'A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P' Code> , qui a | code> valeurs délimitées. Je veux diviser cette variable dans une matrice ou une table. P>
4 Réponses :
Utilisez une fonction de valorisation de table comme celle-ci, et obtenir votre variable et utilisez cette fonction comme celle-ci, p>
@gbn fait la table des nombres exécutant plus vite qu'une boucle .... S'il vous plaît expliquer un peu plus ...
S'il vous plaît voir mes liens dans ma réponse
Il existe des solutions plus élégantes, mais lors de la prise en charge des bases de code héritées de SQL 2005 et ci-dessous, c'est le seul choix.
Si vous nettoyez la table TEMP qui est renvoyée de la fonction?
En général, il s'agit là d'une question commune ici p>
Je vais donner la réponse commune: Les tableaux et listes de SQL Server 2005 et au-delà par Erland Sommmarskog P>
Je recommanderais un Table des numéros , Pas une boucle, pour une utilisation générale. P>
Vous pourriez peut-être améliorer la réponse en expliquant comment appliquer cette méthode pour diviser un texte à chaque délimiteur. =)
Essayez celui-ci:
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;
Belle solution, mais doit clarifier - il est important que la chaîne soit terminée par un symbole délimiteur. Si ce ne sera pas - vous tomberez dans un cycle infini
Mon extension à votre solution consiste à ajouter cette clause après votre "Set @a" Row: Si (Patindex ('% |%', @ a) = 0) commencez à insérer dans #Temp sélectionnez @a; PAUSE; FINIR;
Voici une solution basée sur XML alternative. Il semble avoir une performance similaire comme la solution SplitFN ().
Ceci convertit Varchar A | B | C | D | E | F | G | H | I | J | K | L | M | N | o | p code> dans xml a b c d e < / a> f g H i j k a > l m n o p code> et extrait la valeur de Chaque xml code> nœud. p>
Stackoverflow.com/Questtions/314824/... , Stackoverflow.com/Questtions/697519/...
Dupliqué possible de Stackoverflow.com/questions/2647/split-string-in-sql