Wie können wir in einer SQL Server- WHERE
Bedingung überprüfen , ob die Spalte nicht null und nicht die leere Zeichenfolge ( ''
) ist?
Wie können wir in einer SQL Server- WHERE
Bedingung ü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 NULL
Werte zurück, wenn sie in einer WHERE
Klausel verwendet werden. Da NULL
wird UNKNOWN
eher 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 NULL
oder eine leere Zeichenfolge oder eine Zeichenfolge, die vollständig aus Leerzeichen besteht, werden von dieser Abfrage ausgeschlossen.
column
es 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, '') <> ''
?