2017-12-18 5 views
0

Ich habe eine Tabelle mit Daten wie folgt aus:falsche Syntax in der Nähe von „Fall“

ID | Fill 
    --------------- 
    1 | @@@@ 
    2 | @@@@Y 
    3 | @@@@Y245 

ich die obigen Daten in eine andere Tabelle einfügen möchten, und erwarten, dass die Ergebnistabelle sein:

ID | Fill 
    ---------------- 
    1 |  (Space) 
    2 |  Y 
    3 |  Y245 

das heißt, wenn ich @@@@ finden, sollte es durch den Raum sein ersetzen (4 Raum char wie es 4 @ hat)

Hier ist, wie ich versuche, dies zu tun:

insert into table1 
    (
    id 

    ,case 
     when contains(substring([fill],1,4),'@@@@') then ' '+substring([fill],5,100) 
     else [fill] 
     end 
    ) 
    select 
    id 
    ,convert(char(100),[col1]+[col2]+[col3]+[col4]) 
     from 
    table2 

Allerdings zeigt es Syntaxfehler in der Nähe von "case". Was mache ich falsch? Wie kann ich das gewünschte Ergebnis erzielen?

+0

'CONTAINS' ist ein Freitextsuche Betreiber zu erreichen, scheint es, Sie suchen', wenn [füllen] wie ‚@@@@%‘ '? –

+1

Darüber hinaus ist Ihre Syntax einfach falsch. 'in Tabelle einfügen (Liste der einzufügenden Spalten) hier Abfrage auswählen ', Sie haben den Fallausdruck in" Spaltenliste "platziert, was falsch ist. Also ja, falsche Syntax. –

+0

Schauen Sie sich 'Patindex' an. Suchen Sie auch nach allgemeinen Fragen zum Entfernen/Abschneiden führender Zeichen. – shawnt00

Antwort

2

Verwenden Sie einfach replace()

insert into destination_table (col1) 
select replace(col1, '@', ' ') from source_table 

Wenn @ auftritt, wird er ersetzt werden. Wenn nicht, wird die ursprüngliche Zeichenfolge verwendet.

+0

Der Teilstring, den ich verwendet habe, weil ich die genaue Position von @ herausfinden möchte, wo ich ein Leerzeichen einfügen kann. Wie auch immer, ich habe wenig unterschiedliche Charaktere, auch an verschiedenen Positionen. Ich möchte die paar Zeichen durch andere Zeichen ersetzen (basierend auf der Position) – AskMe

0

Der Fall ist in der Feldliste Teil der INSERT-Anweisung und ist daher nicht gültig. Sie könnten nur eine einfache ersetzen verwenden diese

INSERT INTO table1 (id, fill) 
select id, replace(fill, '@@@@', ' ') from table2 
Verwandte Themen