Wie können wir in einer SQL Server- WHEREBedingung überprüfen , ob die Spalte nicht null und nicht die leere Zeichenfolge ( '') ist?
Wie können wir in einer SQL Server- WHEREBedingung überprüfen , ob die Spalte nicht null und nicht die leere Zeichenfolge ( '') ist?
Antworten:
Wenn Sie nur "" als leere Zeichenfolge abgleichen möchten
WHERE DATALENGTH(COLUMN) > 0
Wenn Sie eine Zeichenfolge, die ausschließlich aus Leerzeichen besteht, als leer zählen möchten
WHERE COLUMN <> ''
Beide geben keine NULLWerte zurück, wenn sie in einer WHEREKlausel verwendet werden. Da NULLwird UNKNOWNeher für diese als bewertet TRUE.
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
Gibt nur die einzelne Zeile zurück A. Dh die Zeilen mit NULLoder eine leere Zeichenfolge oder eine Zeichenfolge, die vollständig aus Leerzeichen besteht, werden von dieser Abfrage ausgeschlossen.
columnes einen Index gibt, wird Ihre Abfrage ihn wahrscheinlich nicht verwenden
WHERE NULLIF(your_column, '') IS NOT NULL
Heutzutage (4,5 Jahre später) würde ich nur verwenden, um einem Menschen das Lesen zu erleichtern
WHERE your_column <> ''
Es besteht zwar die Versuchung, die Nullprüfung explizit zu machen ...
WHERE your_column <> ''
AND your_column IS NOT NULL
... wie @Martin Smith in der akzeptierten Antwort demonstriert, fügt es nicht wirklich etwas hinzu (und ich persönlich meide heutzutage SQL-Nullen vollständig, so dass es sowieso nicht auf mich zutrifft!).
Coalesce faltet Nullen in einen Standardwert:
COALESCE (fieldName, '') <> ''
im Grunde
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Überprüfen Sie einfach: wobei Wert> '' - nicht null und nicht leer
-- COLUMN CONTAINS A VALUE (ie string not null and not empty) :
-- (note: "<>" gives a different result than ">")
select iif(null > '', 'true', 'false'); -- false (null)
select iif('' > '', 'true', 'false'); -- false (empty string)
select iif(' ' > '', 'true', 'false'); -- false (space)
select iif(' ' > '', 'true', 'false'); -- false (tab)
select iif('
' > '', 'true', 'false'); -- false (newline)
select iif('xxx' > '', 'true', 'false'); -- true
--
--
-- NOTE - test that tab and newline is processed as expected:
select 'x x' -- tab
select 'x
x' -- newline
WHERE COALESCE(column, '') <> ''?