2017-03-03 1 views
2

ich eine Tabelle Variable vom Typ erhalten wie dieseEntfernen Sie einige Zeichen einer Spalte aus einer Tabelle Variable vom Typ

color 
------------- 
Black 
Blue<br/>PMS 285C 
Green<br/>PMS 360 
Red<br/>PMS 199 

Ich möchte sie wie

color 
------------- 
Black, Blue, Green, Red 

Aber ich eine sehr schwierige Zeit habe machen um den "& lt .." Zeug zu entfernen. folgte ich diese Antwort: Is there a way to loop through a table variable in TSQL without using a cursor? Um eine temporäre Tabelle in einer Schleife zu erstellen und die Zeichen entfernen, aber immer noch nicht

DECLARE @result int, @i int = 0, @colors varchar(800); 
DECLARE @results table(color varchar(40)); 
INSERT INTO @results SELECT color FROM... 

DECLARE @temp table(Id INT, color varchar(40)); 
INSERT INTO @temp SELECT ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS Id, color FROM @results 

WHILE (SELECT Count(*) FROM @temp WHERE color like '%&lt%') > 0 
BEGIN 
    SELECT Top 1 @i = Id FROM @temp WHERE color like '%&lt%' 
    UPDATE @temp Set color = (case when color like '%&lt%' 
         then left(color, charindex('&lt', color) - 1) 
         else color 
        end) Where Id = @i 
    Delete @temp Where Id = @i 
END 

ich noch

color 
------------------------------------------------------------------------------ 
Black, Blue<br/>PMS 285C, Green<br/>PMS 360, Red<br/>PMS 199 

Könnte mir bekommen funktioniert jemand bitte helfen? Oder geben Sie einige Vorschläge.

Dank

Antwort

0

Dies verwendet left() mit charindex() den linken Teil eines jeden Wert zu erhalten, bevor die &; und verwendet die stuff() with select ... for xml path ('') method of string concatenation.

select stuff((
    select ', '+left(color,charindex('&',color+'&')-1) 
    from @temp 
    for xml path (''), type).value('.','varchar(max)') 
    ,1,2,'') 

Testaufbau:

create table temp (color varchar(32)) 
insert into temp values 
('Black') 
,('Blue<br/>PMS 285C') 
,('Green<br/>PMS 360') 
,('Red<br/>PMS 199') 

select stuff((
    select ', '+left(color,charindex('&',color+'&')-1) 
    from temp 
    for xml path (''), type).value('.','varchar(max)') 
    ,1,2,'') 

kehrt: Black, Blue, Green, Red

rextester Demo: http://rextester.com/TWESQZ38491

Referenz:

+1

bitte erklären, wie es funktioniert – Horaciux

0

Eine andere Version Basis auf vorherige Antwort

create table temp (color varchar(32)) 
    insert into temp values 
    ('Black') 
    ,('Blue<br/>PMS 285C') 
    ,('Green<br/>PMS 360') 
    ,('Red<br/>PMS 199') 



    declare @var varchar(max) 
    set @var='' 
    select @[email protected]+case when charindex('&',color)=0 then color 
     else left(color, charindex('&',color)-1) end +', ' from temp 
    select left(@var, len(@var)-1) 
Verwandte Themen