2013-01-05 9 views
19

Ich versuche, leere "Text" -Felder aus meiner Tabelle zu bekommen, die ich manuell mit pgadmin gelöscht habe. zunächst in diesen Bereichen war ‚‘, und ich kann sie wie folgt abfragen:Postgresql, leere Felder auswählen

SELECT mystr, mystr1 FROM mytable WHERE mystr='' or mystr1='' 

Aber das funktioniert nicht, wenn ich Text aus ihnen löschen und Zellen leer lassen.

Wie schreibe ich Abfrage, um diese '' und Zellen zusammen in Ergebnis zu löschen? Oder löschen Sie Zellen allein?

+0

Sind die Strings leer oder NULL? (in Postgres '' '' und 'NULL' sind unterschiedlich) – wildplasser

+0

Ich weiß nicht, was 'Typ der leeren Zelle' ist, löschte nur den gesamten Text der Zelle mit pgadmin. Jetzt versuche ich WHERE mystr = NULL ODER mystr1 = NULL abzufragen, und habe kein Ergebnis erhalten. –

+6

Sie können nicht mit NULL vergleichen, NULL ist kein Wert, es ist orthogonal. Sie sollten stattdessen 'WHERE mystr IS NULL' verwenden. – wildplasser

Antwort

37
SELECT mystr, mystr1 
FROM mytable 
WHERE COALESCE(mystr, '') = '' 
    OR COALESCE(mystr1, '') = '' 
    ; 

Erläuterung: die coalesce(a,b,c, ...) Funktion durchläuft die Liste a,b,c,... von links nach rechts und stoppt beim ersten Nicht-Null-Elemente. a,b,c kann ein beliebiger Ausdruck (oder eine Konstante) sein, muss aber denselben Typ ergeben (oder vom selben Typ abhängig sein).

+0

Vielen Dank" Wildplasser ", nie einen solchen Ausdruck oder Befehl zu sehen. Ich muss dies sorgfältig prüfen. Das finde immer noch meine leeren Zellen Zum Glück habe ich durch das Kopieren von Daten in Notepad festgestellt, dass in diesen "leeren" Zellen pgadmin ein Leerzeichen (chr (32)) bleibt. Also gibt where mystr = '' Ergebnisse. Ist hier (in postgresql) eine Funktion wie TRIM, die ablehnen kann Leerzeichen von beiden Seiten eines Strings? –

+0

Ja, es gibt eine TRIM() -Funktion. Es ist sogar ANSI-SQL (genau wie COALESCE()) – wildplasser

Verwandte Themen