Ich möchte eine SELECT-Anweisung schreiben, die nur einen Test verwendet, 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 einzigen Test verwendet.
Antworten:
Funktionell sollten Sie in der Lage sein, zu verwenden
SELECT column_name FROM table_name WHERE TRIM(column_name) IS NULL
Das Problem dort ist, dass ein Index für COLUMN_NAME nicht verwendet wird. Sie benötigen einen funktionsbasierten Index für TRIM (Spaltenname), wenn dies eine selektive Bedingung ist.
quelle
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.AKTUALISIEREN
In Oracle können Sie
NVL
dieselben Ergebnisse erzielen.SELECT column_name from table_name WHERE RTRIM(NVL(column_name, '')) LIKE ''
quelle
WHERE RTRIM(ISNULL(column_name, '')) LIKE ''
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
quelle
Beim Überprüfen des
null or Empty
Werts für eine Spalte habe ich festgestellt, dass in verschiedenen Datenbanken einige Supportprobleme 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()
TRIM(), RTRIM(), LTRIM()
So überprüfen Sie Leer / Null / Leerzeichen: -
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 auch anderen :)
quelle
Diese phpMyAdmin-Abfrage gibt die Zeilen zurück, die NICHT null oder leer oder nur Leerzeichen sind:
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.
quelle
Verwenden Sie die folgende Abfrage und es funktioniert
SELECT column_name FROM table_name where isnull(column_name,'') <> ''
quelle
Was ich
IsNotNullOrEmptyOrWhiteSpace
in T-SQL verwende, ist:SELECT [column_name] FROM [table_name] WHERE LEN(RTRIM(ISNULL([column_name], ''))) > 0
quelle
Jeder Vorschlag einer einzelnen Person, eine Abfrage in Oracle auszuführen, um Datensätze zu finden, deren spezifisches Feld nur leer ist (dies schließt nicht (null) oder ein anderes Feld nur eine leere Zeile ein), funktionierte nicht. Ich habe jeden einzelnen vorgeschlagenen Code ausprobiert. Ich denke, ich werde weiter online suchen.
*****AKTUALISIEREN*****
Ich habe es versucht und es hat funktioniert, nicht sicher, warum es nicht funktionieren würde, wenn <1, aber aus irgendeinem Grund <2 funktioniert und nur Datensätze zurückgegeben, deren Feld nur leer ist
Wählen Sie [Spaltenname] aus [Tabellenname], wobei LÄNGE (Spaltenname) <2;
Ich vermute, dass jedes Skript, das zum Konvertieren von Daten verwendet wurde, etwas im Feld belassen hat, obwohl es leer ist. Das ist sowieso meine Vermutung, warum <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 herausgreifen.
Ich hoffe, meine Lösung hilft eines Tages jemand anderem da draußen.
quelle
Wie in Oracle können Sie die NVL-Funktion in MySQL verwenden. Sie können IFNULL (columnaName, newValue) verwenden, um das gewünschte Ergebnis wie in diesem Beispiel zu erzielen
SELECT column_name from table_name WHERE IFNULL(column_name,'') NOT LIKE '%_%';
quelle
Sie können verwenden
SELECT [column_name] FROM [table_name] WHERE [column_name] LIKE '% %' OR [column_name] IS NULL
quelle