2013-06-21 13 views
9

Ich habe eine Spalte, die entweder NULL oder leeren Speicherplatz (d. H. '') Werte haben kann. Ich möchte diese beiden Werte durch einen gültigen Wert wie 'UNKNOWN' ersetzen. Die verschiedenen Lösungen, die ich gefunden habe, schlagen vor, den Wert innerhalb der Tabelle selbst zu ändern. Dies ist jedoch in diesem Fall keine Option, da die Datenbank für eine Drittanbieter-Anwendung gedacht ist, die sehr schlecht entwickelt und/oder gepatcht wurde (in Wirklichkeit hätte mein Rottweiler vielleicht eine bessere Arbeit geleistet). Ich bin besorgt, dass das Ändern der zugrunde liegenden Daten dazu führen könnte, dass die Anwendung in ein rauchendes Loch schmilzt.Ersetzen von NULL und leere Zeichenfolge innerhalb Select-Anweisung

I Variationen der folgenden Befehle versucht haben:

COALESCE(Address.COUNTRY, 'United States') -- Won't replace empty string as it is not NULL 
REPLACE(Address.COUNTRY, '', 'United States') -- Doesn't replace empty string 
ISNULL(Address.COUNTRY, 'United States') -- Works for NULL but not empty string 

Ich weiß, dass ich die CASE Anweisung verwenden könnte, aber am der Hoffnung es eine viel elegantere/effiziente Lösung.

Sie müssen mir vertrauen, wenn ich sage, dass ich nach einer Lösung für mein spezifisches Problem gesucht habe und keine Antwort gefunden habe. Wenn ich etwas übersehen habe, zeige mir doch freundlich den erleuchteten Weg.

Antwort

46

Versuchen Sie, diese

COALESCE(NULLIF(Address.COUNTRY,''), 'United States') 
+1

Dies scheint es getan zu haben. Bier ist bei mir. Allerdings bin ich überrascht, dass es funktioniert, dass mein Verständnis ist, dass die COALESCE-Funktion wird den ersten Nicht-Null-Wert greifen. In der Anweisung würde ich erwarten, dass es leeren Platz im Gegensatz zu der Textzeichenfolge zurückgibt ??? Aber unter dem Strich, danke für die Lösung. – mbadtk

+4

Es gibt zwei Funktionen in dieser Anweisung, eine 'NULLIF', die leere Zeichenfolge in null konvertiert und dann' coalesce', die auf null –

+0

@rs .: Anmerkung: 'nullif' konvertiert keine leere Zeichenfolge in null, Es wird zurückgegeben null, wenn zwei Argumente gleich sind;). –

5

Klingt wie Sie eine Ansicht, anstatt zu verändern tatsächlichen Tabellendaten werden soll.

Coalesce(NullIf(rtrim(Address.Country),''),'United States') 

Dies zwingt Ihre Spalte null zu sein, wenn es tatsächlich einen leeren String (oder leere Zeichenkette) und dann die coalesce eine Null, mit zu arbeiten.

+1

"Ltrim" und "Rtrim" scheint nutzlos zu sein? Wenn es leer ist (außer Leerzeichen) ist es von beiden Seiten leer;) – Wolph

+1

@WoLpH aye, sehr wahr. Ich habe eins entfernt. (Ich denke, ich schreibe einfach beides) – Brad

+1

Das Erstellen einer Ansicht war mir nicht in den Sinn gekommen, obwohl es wahrscheinlich hätte sein sollen. rs und Ihre Variation boten eine angemessene Lösung, so dass Sie nicht sehen müssen. – mbadtk

Verwandte Themen