it-swarm.com.de

Wie überprüfe ich, ob die Zeichenfolge in SQL Server nicht Null und nicht leer ist?

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

172
user993935

Wenn Sie nur "" als leere Zeichenfolge suchen 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. As NULL wird für diese eher als UNKNOWN ausgewertet als TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

INSERT INTO T 
VALUES      ('A'), 
            (''),
            ('    '), 
            (NULL); 

SELECT * 
FROM   T 
WHERE  C <> ''

Gibt nur die einzelne Zeile A zurück. Das heißt Alle Zeilen mit NULL oder einer leeren Zeichenfolge oder einer Zeichenfolge, die ausschließlich aus Leerzeichen besteht, werden von dieser Abfrage ausgeschlossen.

SQL Fiddle

262
Martin Smith
WHERE NULLIF(your_column, '') IS NOT NULL

Heutzutage (4,5 Jahre später) würde ich einfach verwenden, um es einem Menschen leichter zu machen, zu lesen

WHERE your_column <> ''

Zwar besteht 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 eigentlich nichts hinzu (und ich persönlich meide SQL-Nullen heutzutage vollständig, so würde es sowieso nicht auf mich zutreffen!).

93
onedaywhen

Coalesce fügt Nullen in einen Standardwert ein:

COALESCE (fieldName, '') <> ''
12
Anoop Verma

Eine indexfreundliche Methode hierfür ist:

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

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

 where isnull(field,'') <> ''
6
Luc

im Grunde genommen

SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
4

Überprüfen Sie einfach: Dabei ist der 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
0
Ellis

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
DxTx