Ich habe eine Spalte in einer Tabelle, die null oder leere Werte enthalten kann. Wie überprüfe ich, ob eine Spalte in den in einer Tabelle vorhandenen Zeilen leer oder null ist?
(e.g. null or '' or ' ' or ' ' and ...)
Ich habe eine Spalte in einer Tabelle, die null oder leere Werte enthalten kann. Wie überprüfe ich, ob eine Spalte in den in einer Tabelle vorhandenen Zeilen leer oder null ist?
(e.g. null or '' or ' ' or ' ' and ...)
Antworten:
Dadurch werden alle Zeilen auswählen , wo some_col
ist NULL
oder ''
(leere Zeichenkette)
SELECT * FROM table WHERE some_col IS NULL OR some_col = '';
WHERE some_col IS NULL OR some_col = ' '
(ein in die Zeichenfolge eingefügtes Leerzeichen) ändern , funktioniert dies sowohl unter MySQL als auch unter Oracle (siehe Antwort von "onedaywhen"). some_col = ''
funktioniert unter Oracle nicht, da leere Zeichenfolgen dort NULL bedeuten.
' '
, funktioniert es in SQLite nicht. Es werden nur identische / direkte Zeichenfolgenübereinstimmungen verarbeitet.
Wie im SQL-92-Standard definiert, wird beim Vergleichen von zwei Zeichenfolgen unterschiedlicher Breite der schmalere Wert mit Leerzeichen rechts aufgefüllt, damit er dieselbe Breite wie der breitere Wert hat. Daher werden alle Zeichenfolgenwerte, die vollständig aus Leerzeichen bestehen (einschließlich Null-Leerzeichen), als gleich angesehen, z
'' = ' ' IS TRUE
'' = ' ' IS TRUE
' ' = ' ' IS TRUE
' ' = ' ' IS TRUE
etc
Daher sollte dies unabhängig davon funktionieren, wie viele Leerzeichen den some_col
Wert ausmachen :
SELECT *
FROM T
WHERE some_col IS NULL
OR some_col = ' ';
oder prägnanter:
SELECT *
FROM T
WHERE NULLIF(some_col, ' ') IS NULL;
WHERE some_col IS NULL OR some_col = ' '
(ein in die Zeichenfolge eingefügtes Leerzeichen) ändern, dann funktioniert es sowohl unter MySQL als auch unter Oracle. some_col = ''
funktioniert unter Oracle nicht, da leere Zeichenfolgen dort NULL bedeuten und die vollständige Bedingung NULL wird.
SELECT * FROM T WHERE some_col IS NOT NULL OR same_col <> ' ';
und SELECT * FROM T WHERE NULLIF(some_col, ' ') IS NOT NULL;
für mich zu arbeiten. Hoffe das wird nützlich sein.
'' = ' '
in SQLServer, aber nicht in SQLite, soweit ich das beurteilen kann, nachdem ich es jetzt getestet habe.
Ein kürzerer Weg, um die Bedingung zu schreiben:
WHERE some_col > ''
Schon seit null > ''
produziert unknown
, hat dies die Wirkung der Filterung beide aus null
und leeren Saiten.
coalesce(some_col, '') = ''
Sie können testen , ob eine Spalte null ist oder nicht null verwendet WHERE col IS NULL
oder WHERE col IS NOT NULL
zB
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL
In Ihrem Beispiel haben Sie verschiedene Permutationen von Leerzeichen. Sie können Leerzeichen mit entfernen TRIM
und COALESCE
einen NULL-Wert als Standard festlegen (COALESCE gibt den ersten Wert ungleich Null 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, die MyCol
null oder eine beliebige Länge von Leerzeichen sind.
Wenn Sie dies vermeiden können, ist es besser, keine Funktion für eine Spalte in der WHERE-Klausel zu haben, da dies die Verwendung eines Index erschwert. Wenn Sie einfach überprüfen möchten, ob eine Spalte null oder leer ist, sollten Sie dies besser tun:
SELECT myCol
FROM MyTable
WHERE MyCol IS NULL OR MyCol = ''
Weitere Informationen finden Sie unter TRIM COALESCE und IS NULL .
Ebenfalls Arbeiten mit NULL - Werten von der MySQL - Dokumentation
)
vor dem =
Zeichen
Eine andere Methode ohne WO, versuchen Sie dies ..
Wählt sowohl leere als auch NULL-Werte aus
SELECT ISNULL(NULLIF(fieldname,'')) FROM tablename
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
Ich hasse unordentliche Felder in meinen Datenbanken. Wenn die Spalte eine leere Zeichenfolge oder eine Null sein könnte, würde ich dies lieber beheben, bevor Sie die Auswahl jedes Mal wie folgt durchführen:
UPDATE MyTable SET MyColumn=NULL WHERE MyColumn='';
SELECT * FROM MyTable WHERE MyColumn IS NULL
Dies hält die Daten aufgeräumt, solange Sie aus irgendeinem Grund nicht speziell zwischen NULL und leer unterscheiden müssen.
Beim Überprüfen des null or Empty
Werts für eine Spalte in meinem Projekt habe ich festgestellt, dass in verschiedenen Datenbanken Bedenken hinsichtlich der Unterstützung bestehen.
Jede Datenbank wird nicht unterstützt TRIM
Methode.
Nachfolgend finden Sie die Matrix, um die unterstützten Methoden verschiedener Datenbanken 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:
TRIM(), RTRIM(), LTRIM()
RTRIM(), LTRIM()
RTRIM(), LTRIM()
So überprüfen Sie Leer / Null: -
Im Folgenden finden Sie zwei verschiedene Möglichkeiten für verschiedene Datenbanken.
Die Syntax für diese Trimmfunktionen lautet:
Verwendung von Trim zur Kontrolle
SELECT FirstName FROM UserDetails WHERE TRIM(LastName) IS NULL
Verwendung von LTRIM & RTRIM zur Überprüfung von
SELECT FirstName FROM UserDetails WHERE LTRIM(RTRIM(LastName)) IS NULL
Die beiden oben genannten Methoden bieten dasselbe Ergebnis, das nur auf der Grundlage Ihrer Datenbankunterstützung verwendet wird. Es gibt nur die FirstName
from- UserDetails
Tabelle zurück, wenn sie leer istLastName
Ich hoffe das hilft dir :)
Wenn Sie möchten, dass NULL-Werte zuletzt angezeigt werden, wenn Sie ORDER BY ausführen, versuchen Sie Folgendes:
SELECT * FROM my_table WHERE NULLIF(some_col, '') IS NULL;
SELECT * FROM tbl WHERE trim(IFNULL(col,'')) <> '';
col1 != IFNULL(col2,'')
Auf null prüfen
$column is null
isnull($column)
Auf leer prüfen
$column != ""
Sie sollten jedoch immer NOT NULL für die Spalte festlegen. Die
MySQL-Optimierung kann nur eine IS NULL-Ebene verarbeiten
NULL
Werte zu akzeptieren , ist ein weiteres Thema. Ich halte es nicht für angebracht, diese Empfehlung ohne Begründung abzugeben.
-1
und zu fördern ''
.
select * from table where length(RTRIM(LTRIM(column_name))) > 0
RTRIM
und zu verwenden LTRIM
, aber nicht TRIM
?
In meinem Fall wurde während des Datenimports Platz in die Spalte eingegeben, und obwohl es wie eine leere Spalte aussah, war seine Länge 1. Also habe ich zuerst die Länge der leer aussehenden Spalte überprüft und length(column)
dann basierend darauf können wir eine Suchabfrage schreiben
SELECT * FROM TABLE WHERE LENGHT (COLUMN) = Länge der Spalte für leere Spalte
Versuchen Sie dies, wenn der Datentyp Zeichenfolge und Zeile null ist
SELECT * FROM table WHERE column_name IS NULL OR column_name = ''
Wenn der Datentyp int oder die Spalte 0 ist, versuchen Sie dies
SELECT * FROM table WHERE column_name > = 0
select isnull(mycolumn) from mytable
Gibt 1 zurück, wenn mycolumn null ist.