Wie prüfe ich, ob der String in SQL Server nicht null und nicht leer ist?

201

Wie können wir in einer SQL Server- WHEREBedingung überprüfen , ob die Spalte nicht null und nicht die leere Zeichenfolge ( '') ist?

user993935
quelle

Antworten:

302

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.

SQL Fiddle

Martin Smith
quelle
6
Warum nicht WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers
10
Denn wenn columnes einen Index gibt, wird Ihre Abfrage ihn wahrscheinlich nicht verwenden
Lamak
106
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!).

eines Tages, wenn
quelle
15

Coalesce faltet Nullen in einen Standardwert:

COALESCE (fieldName, '') <> ''
Anoop Verma
quelle
8

im Grunde

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
Saalim Bhoraniya
quelle
7

Eine indexfreundliche Methode hierfür ist:

where (field is not null and field <> '')

Wenn nicht viele Zeilen vorhanden sind oder dieses Feld nicht indiziert ist, können Sie Folgendes verwenden:

 where isnull(field,'') <> ''
Luc
quelle
2

Sie können eine dieser Optionen verwenden, um Null-, Leerzeichen- und leere Zeichenfolgen zu überprüfen.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
DxTx
quelle
0

Ü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
Ellis
quelle