web-dev-qa-db-de.com

Wie überprü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 überprüfe ich, ob eine Spalte leer oder null in den Zeilen einer Tabelle ist?.

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

Dadurch werden alle Zeilen ausgewählt, in denen some_colNULL oder '' (leere Zeichenfolge) ist.

SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
357
maček

Wie im SQL-92-Standard definiert, wird beim Vergleich von zwei Zeichenfolgen unterschiedlicher Breite der engere Wert mit Leerzeichen aufgefüllt, damit er die gleiche Breite hat wie der breitere Wert. Daher werden alle String-Werte, die vollständig aus Leerzeichen bestehen (einschließlich Null-Leerzeichen), als identisch betrachtet, z. 

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

Daher sollte dies funktionieren, unabhängig davon, aus wie vielen Leerzeichen der some_col-Wert besteht:

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

oder prägnanter:

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

Ein kürzerer Weg, um die Bedingung zu schreiben:

WHERE some_col > ''

Da null > ''unknown erzeugt, werden null und leere Zeichenfolgen herausgefiltert.

53
Andomar

Sie können mit WHERE col IS NULL oder WHERE col IS NOT NULL testen, ob eine Spalte null oder nicht null ist. 

SELECT myCol 
FROM MyTable 
WHERE MyCol IS NULL 

In Ihrem Beispiel haben Sie verschiedene Varianten des Leerraums. Sie können Leerzeichen mit TRIM entfernen und mit COALESCE einen NULL-Wert vorgeben (COALESCE gibt den ersten Nicht-Null-Wert aus den von Ihnen angegebenen Werten 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 Whitespace 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 überprüfen möchten, ob eine Spalte null oder leer ist, können Sie dies besser tun:

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

Siehe TRIMCOALESCE und IS NULL für weitere Informationen.

Auch Mit Nullwerten arbeiten aus den MySQL-Dokumenten

12
Code Magician

Eine andere Methode ohne WO, probieren Sie das .. 

Wählt sowohl Leere als auch NULL-Werte aus 

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename
9
PodTech.io

Ich hasse unordentliche Felder in meinen Datenbanken. Wenn die Spalte eine leere Zeichenfolge oder eine leere Zeichenfolge sein kann, würde ich dies vor dem Auswählen jedes Mal korrigieren.

UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL

Dadurch bleiben die Daten aufgeräumt, solange Sie nicht zwingend zwischen NULL und leer unterscheiden müssen.

5
Keith Johnson

Beim Überprüfen des Werts null or Empty Für eine Spalte in meinem Projekt ist mir aufgefallen, dass in verschiedenen Datenbanken Bedenken hinsichtlich der Unterstützung bestehen.

Nicht jede Datenbank unterstützt die TRIM -Methode.

Nachfolgend finden Sie die Matrix, um die von verschiedenen Datenbanken unterstützten Methoden zu verstehen.

Die TRIM-Funktion in SQL wird verwendet, um das angegebene Präfix oder Suffix aus einer Zeichenfolge zu entfernen. Das am häufigsten entfernte Muster sind Leerzeichen. Diese Funktion wird in verschiedenen Datenbanken unterschiedlich aufgerufen:

  • MySQL:TRIM(), RTRIM(), LTRIM()
  • Oracle:RTRIM(), LTRIM()
  • SQL Server:RTRIM(), LTRIM()

So überprüfen Sie Leer/Null: -

Nachfolgend sind zwei verschiedene Möglichkeiten für verschiedene Datenbanken aufgeführt:

Die Syntax für diese Trimmfunktionen lautet:

  1. Verwenden Sie Trim, um - zu überprüfen

    SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL

  2. Verwenden von LTRIM & RTRIM zum Überprüfen von -

    SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL

Über beide Möglichkeiten können Sie das gleiche Ergebnis erzielen, das Sie nur basierend auf Ihrer Datenbankunterstützung verwenden. Es gibt nur die FirstName von UserDetails Tabelle zurück, wenn es eine leere LastName hat

Ich hoffe, das wird dir helfen:)

4
Vikash Pandey

versuchen

SELECT 0 IS NULL ,  '' IS NULL , NULL IS NULL

-> 0, 0, 1

oder

SELECT ISNULL('  ') , ISNULL( NULL )
 -> 0 ,1

Referenz

4
diEcho

Entweder 

SELECT IF(field1 IS NULL or field1 = '', 'empty', field1) as field1 from tablename

oder

SELECT case when field1 IS NULL or field1 = ''
        then 'empty'
        else field1
   end as field1 from tablename
4
Reynante Daitol

Wenn Sie möchten, dass NULL-Werte zuletzt bei ORDER BY angezeigt werden, versuchen Sie Folgendes:

SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
2
Ghostman

Diese Aussage ist für mich viel sauberer und lesbarer:

select * from my_table where ISNULL(NULLIF(some_col, ''));
2
Amaynut

Du kannst es auch tun 

SELECT * FROM table WHERE column_name LIKE ''

Das umgekehrte Wesen

SELECT * FROM table WHERE column_name NOT LIKE ''
2
brenjt

Überprüfen Sie auf null

$column is null
isnull($column)

Überprüfen Sie auf leer

$column != ""

Sie sollten jedoch immer NOT NULL für die Spalte setzen.
Mysql-Optimierung kann nur eine NULL-Ebene IS verarbeiten

1
ajreal

In meinem Fall wurde während des Datenimports Leerzeichen in die Spalte eingegeben, und obwohl es wie eine leere Spalte aussah, war seine Länge 1. Daher überprüfte ich zuerst die Länge der leeren Spalte mit length(column), und danach können wir eine Suche schreiben Abfrage

SELECT * FROM TABLE WHERE LENGHT (COLUMN) = Spaltenlänge für leere Säule

0
MR AND
select * from table where length(RTRIM(LTRIM(column_name))) > 0
0
Hakan Ilgar
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
0
Baltazar Moreno