369 Stimmen

Wie prüfe ich, ob eine Spalte in MySQL leer oder null ist?

Ich habe eine Spalte in einer Tabelle, die null oder leere Werte enthalten kann. Wie prüfe ich, ob eine Spalte in den Zeilen einer Tabelle leer oder ungültig ist?

(e.g. null or '' or '  ' or '      ' and ...)

563voto

maček Punkte 72991

Damit werden alle Zeilen ausgewählt, in denen some_col es NULL o '' (leere Zeichenkette)

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';

163voto

onedaywhen Punkte 52850

Wie im SQL-92-Standard definiert, wird beim Vergleich zweier unterschiedlich breiter Zeichenketten der schmalere Wert mit Leerzeichen aufgefüllt, damit er die gleiche Breite wie der breitere Wert hat. Daher werden alle String-Werte, die ausschließlich aus Leerzeichen bestehen (einschließlich Null-Leerzeichen), als gleichwertig betrachtet, z. B.

'' = ' ' IS TRUE
'' = '  ' IS TRUE
' ' = '  ' IS TRUE
'  ' = '      ' IS TRUE
etc

Daher sollte dies unabhängig davon funktionieren, wie viele Leerzeichen die some_col Wert:

SELECT * 
  FROM T
 WHERE some_col IS NULL 
       OR some_col = ' ';

oder knapper ausgedrückt:

SELECT * 
  FROM T
 WHERE NULLIF(some_col, ' ') IS NULL;

101voto

Andomar Punkte 224164

Eine kürzere Art, die Bedingung zu schreiben:

WHERE some_col > ''

Seit null > '' produziert unknown Dies hat zur Folge, dass sowohl null und leere Zeichenfolgen.

41voto

Code Magician Punkte 22181

Bitte beachten Sie: Das beste Verfahren steht am Ende der Antwort.


Sie können testen, ob eine Spalte null ist oder nicht null ist, indem Sie WHERE col IS NULL o WHERE col IS NOT NULL z.B..

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

In Ihrem Beispiel haben Sie verschiedene Permutationen von Leerraum. Sie können Leerraum entfernen mit TRIM und Sie können COALESCE um einen NULL-Wert vorzugeben (COALESCE gibt den ersten Nicht-Null-Wert der von Ihnen angegebenen Werte zurück.

z.B..

SELECT myCol
FROM MyTable
WHERE TRIM(COALESCE(MyCol, '')) = '' 

Diese letzte Abfrage gibt Zeilen zurück, in denen MyCol Null ist oder eine beliebige Länge von Leerzeichen hat.

Wenn Sie es vermeiden können, ist es besser, keine Funktion für eine Spalte in der WHERE-Klausel zu haben, da dies die Verwendung eines Indexes erschwert. Wenn Sie einfach nur prüfen wollen, ob eine Spalte leer ist, ist es vielleicht besser, dies zu tun:

SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol =  '' 

Véase TRIM COALESCE y IS NULL für weitere Informationen.

Auch Arbeiten mit Nullwerten aus den MySQL-Dokumenten

20voto

PodTech.io Punkte 4316

Eine andere Methode ohne WHERE, versuchen Sie dies.

Wählt sowohl leere als auch NULL-Werte aus

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X