it-swarm.com.de

Wie kann ich mit einem einzigen Test nach Null-, Leer- und Leerzeichenwerten suchen?

Ich möchte eine SELECT-Anweisung schreiben, in der nur ein Test verwendet wird, um Spalten ohne Wert (null, leer oder alle Leerzeichen) zurückzugeben.

Ich dachte, das würde funktionieren:

SELECT column_name from table_name WHERE column_name NOT LIKE '%_%';

Dies funktioniert jedoch nicht für NULL-Werte.

Natürlich kann ich hinzufügen

OR column_name IS NULL

und es wird funktionieren, aber ich möchte einen Weg, der einen einzelnen Test verwendet.

64
John Gordon

Funktionell sollten Sie verwenden können

SELECT column_name
  FROM table_name
 WHERE TRIM(column_name) IS NULL

Das Problem dabei ist, dass ein Index für COLUMN_NAME nicht verwendet wird. Sie müssten einen funktionsbasierten Index für TRIM (Spaltenname) haben, wenn dies eine selektive Bedingung ist.

73
Justin Cave
SELECT column_name from table_name
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''

ISNULL(column_name, '') gibt '' zurück, wenn Spaltenname NULL ist, andernfalls wird Spaltenname zurückgegeben.

UPDATE

In Oracle können Sie NVL verwenden, um dieselben Ergebnisse zu erzielen.

SELECT column_name from table_name
WHERE RTRIM(NVL(column_name, '')) LIKE ''
14
GendoIkari

Beim Überprüfen des Werts null or Empty Für eine Spalte habe ich festgestellt, dass in verschiedenen Datenbanken einige Probleme mit der Unterstützung auftreten.

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:TRIM(), RTRIM(), LTRIM()

So überprüfen Sie Leer/Null/Leerzeichen: -

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 auch anderen helfen:)

6
Vikash Pandey

Die NULLIF-Funktion konvertiert jeden Spaltenwert mit nur Leerzeichen in einen NULL-Wert. Funktioniert für T-SQL und SQL Server 2008 und höher.

SELECT [column_name]
FROM [table_name]
WHERE NULLIF([column_name], '') IS NULL
4

Verwenden Sie die folgende Abfrage und es funktioniert

SELECT column_name FROM table_name where isnull(column_name,'') <> ''
1
dvenkateshreddy

Diese phpMyAdmin-Abfrage gibt die Zeilen zurück, die NICHT null oder leer sind oder nur Leerzeichen:

SELECT * FROM `table_name` WHERE NOT ((`column_name` IS NULL) OR (TRIM(`column_name`) LIKE ''))

wenn Sie Zeilen auswählen möchten, die null/leer/nur Leerzeichen sind, entfernen Sie einfach NOT.

0
Chose

Jeder einzelne Personenvorschlag, eine Abfrage in Oracle auszuführen, um Datensätze zu finden, deren spezifisches Feld nur leer ist (dies schließt nicht (null) oder jedes andere Feld nur eine leere Zeile ein), hat nicht funktioniert. Ich habe jeden einzelnen vorgeschlagenen Code ausprobiert. Ich schätze, ich werde weiter online suchen.

*****AKTUALISIEREN*****

Ich habe dies versucht und es hat funktioniert, nicht sicher, warum es nicht funktioniert, wenn <1, aber aus irgendeinem Grund <2 funktioniert und nur Datensätze zurückgegeben werden, deren Feld nur leer ist

wählen Sie [Spaltenname] aus [Tabellenname], wobei LÄNGE (Spaltenname) <2 ist.

Ich vermute, dass jedes Skript, das zum Konvertieren von Daten verwendet wurde, etwas im Feld hinterlassen hat, obwohl es leer ist. Ich vermute trotzdem, warum die <2 funktioniert, aber nicht <1

Wenn Sie jedoch andere Werte in diesem Spaltenfeld haben, die weniger als zwei Zeichen umfassen, müssen Sie möglicherweise eine andere Lösung finden. Wenn es nicht viele andere Charaktere gibt, können Sie sie heraussuchen.

Hoffe, meine Lösung hilft irgendwann jemandem da draußen.

0
CatWoman