2010-11-16 9 views
1

Dans une procédure stockée que j'écris, j'ai besoin de convertir une chaîne (par exemple 'ABCD') en une liste de ses composants (par exemple ('A','B','C','D')). Y a-t-il un moyen facile de s'y prendre?Convertir une chaîne SQL en liste de caractères

(avec T-SQL dans SQL Server 2008.)

+0

qui SGBDR? 2 plus pour aller –

+0

wow, c'était stupide de ne pas préciser. –

Répondre

3
DECLARE @Str varchar(100) 
DECLARE @StrT varchar(100) 

SET @Str = 'ABCDEFG' 

WHILE LEN(@Str) > 0 
BEGIN 
SET @StrT = LEFT(@Str, 1) 
RAISERROR (@StrT, 0, 0) WITH NOWAIT 
SELECT @Str = RIGHT(@Str, (LEN(@STR) - 1)) 
END 

Vous pouvez modifier cette si nécessaire. Vous n'avez pas vraiment spécifié ce que vous deviez faire avec les lettres, cela les imprime simplement sur la console de messagerie.

+1

Merci, c'était suffisant pour obtenir les résultats dont j'avais besoin. –

+0

@Andrew - heureux d'aider – JNK

2
DECLARE @MyString varchar(100) 
SET @MyString = 'ABCD' 

WHILE LEN(@MyString) > 0 
BEGIN 
SELECT LEFT(@MyString, 1) 
SET @MyString = RIGHT(@MyString, (LEN(@MyString) - 1)) 
END 

Cela fonctionne dans SQL Server 2008.

+0

Vous avez manqué une citation de fermeture après '' ABCD' ... – JNK

+0

Doit être fait alors quand j'ai essayé d'ajouter une ligne vide après ce SET. Oh puits. :) – JeffM

+0

Trop tard sur le tirage au sort, malheureusement; si je pouvais vous aussi vous mettre en colère –

1

hors de JNK's answer bâtiment:

DECLARE @start nvarchar(MAX); 
DECLARE @output nvarchar(MAX); 

SELECT @start = 'ABCDEFG', @output = ''; 

WHILE LEN(@start) > 0 
    BEGIN 
     SET @output = @output + '''' + LEFT(@start, 1) + ''','; 
     SELECT @start = RIGHT(@start, (LEN(@start) - 1)) 
    END 

SELECT CASE WHEN LEN(@output) > 0 THEN LEFT(@output, (LEN(@output) - 1)) ELSE NULL END; 

Vous obtiendrez la mise en forme que vous vouliez.

Personnellement, je préfère ce qui suit, car il est plus facile de travailler avec des données sous forme de tableau:

DECLARE @start nvarchar(MAX); 
DECLARE @output TABLE (value nchar(1)); 

SET @start = 'ABCDEFG'+NCHAR(1121); 

WHILE LEN(@start) > 0 
    BEGIN 
     INSERT INTO @output (value) VALUES (LEFT(@start, 1)); 
     SELECT @start = RIGHT(@start, (LEN(@start) - 1)) 
    END 

SELECT value, CAST(value AS varbinary(4)) AS hex FROM @output; 
+0

Eh bien, vous avez quatre ans de retard, mais j'apprécie l'effort –

+0

@Andrew Juste finissant depuis que j'avais le même problème. – Trisped