2016-04-19 11 views
0

Ich möchte bestimmte Varchar zu NULL ersetzen. Gerade nach vorne habe ichSQL REPLACE mit NULL unerwartetes Ergebnis

SELECT REPLACE('abc', '1', NULL) 

dh für jeden Eingang varchar, wenn mindestens eine ‚1‘ ist innerhalb ich die ganze einzugebenden NULL wird (zB ‚123‘ ist NULL, ‚abc-1‘ ist NULL, etc. .)

Was mich nervt ist auch wenn es keine Übereinstimmung gibt (zB keine Notwendigkeit zu ersetzen), es gibt mir immer noch NULL. Wenn Sie beispielsweise die obige Anweisung ausführen, erhalten Sie NULL.

Warum? Und jede Problemumgehung?

Antwort mit der "Warum" -Komponente und eine nette einfache Abhilfe ausgewählt werden.

Antwort

5

Nach der REPLACE Dokumentation:

NULL zurück, wenn einer der Argumente NULL ist.

aus der obigen Basierend, wird diese Abfrage zurückgeben NULL für alle Spalten:

SELECT 
    REPLACE(NULL, 'abc', 'a'), 
    REPLACE('abc', NULL, 'a'), 
    REPLACE('abc', 'a', NULL) 

Wenn Sie NULL für jeden Eingang zurückkehren möchten, dass die '1' enthält, verwenden Sie einen CASE Ausdruck:

SELECT 
    CASE 
     WHEN 'abc' LIKE '%1%' THEN NULL 
     ELSE 'abc' 
    END 
+0

Ok danke, wenn es so implementiert wurde. Obwohl es mir nicht gefällt, muss ich damit leben. Die Verwendung von CASE als Workaround ist ebenfalls in Ordnung. Vielen Dank. – user1589188