2011-09-12 3 views
1

i ont des données simples venant comme ceci:sql-server-2005: Comment effectuer une scission sur une variable de chaîne délimitée par un tube?

declare @string varchar(500) = "val1|val2|val3" 

Comment pourrais-je diviser ceci en cte ou quelque chose de similaire pour que je puisse l'utilisateur dans une requête ultérieure:

select col1 from table where col2 = @valFromCTE 
+0

Utilisez une fonction split. Vous pouvez voir un exemple dans ma réponse ici: http://stackoverflow.com/questions/7274514/sql-query-to-match-keywords –

+0

ok, j'ai un peu de mal, parce que le mien est une chaîne d'entrée brute que le – Cavide

+0

à droite, je regarde la table des nombres qui est où je trébuche – Cavide

Répondre

1

C'est moyen utile et simple d'interroger une chaîne délimitée comme s'il s'agissait d'une table.

Extrait de: http://www.mindsdoor.net/SQLTsql/ParseCSVString.html

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[fn_ParseCSVString]') and xtype in (N'FN', N'IF', N'TF')) 
drop function [dbo].[fn_ParseCSVString] 
GO 


create function fn_ParseCSVString 
(
@CSVString varchar(8000) , 
@Delimiter varchar(10) 
) 
returns @tbl table (s varchar(1000)) 
as 
/* 
select * from dbo.fn_ParseCSVString ('qwe,c,rew,c,wer', ',c,') 
*/ 
begin 
declare @i int , 
    @j int 
    select @i = 1 
    while @i <= len(@CSVString) 
    begin 
     select @j = charindex(@Delimiter, @CSVString, @i) 
     if @j = 0 
     begin 
      select @j = len(@CSVString) + 1 
     end 
     insert @tbl select substring(@CSVString, @i, @j - @i) 
     select @i = @j + len(@Delimiter) 
    end 
    return 
end 


GO 
+1

Juste pour être pédant, alors que sur les petites chaînes, il est probablement hors de propos, je serais conscient des implications de la performance des méthodes de bouclage sur des chaînes plus grandes. Alors que je l'ai fait pour les valeurs INT, j'ai comparé les performances de diverses méthodes de fractionnement l'année dernière et vous devriez vérifier les résultats: http://sqlblog.com/blogs/aaron_bertrand/archive/2010/07/07/splitting-a -list-of-entiers-autre-roundup.aspx –

Questions connexes