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?

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


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!).


15

Coalesce faltet Nullen in einen Standardwert:

COALESCE (fieldName, '') <> ''


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,'') <> ''

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

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.