Bagaimana cara mengecek apakah tidak Null dan bukan string kosong di SQL server?


202

Bagaimana kita dapat memeriksa dalam kondisi SQL Server WHEREapakah kolom tersebut tidak nol dan bukan string kosong ( '')?

Jawaban:


305

Jika Anda hanya ingin mencocokkan "" sebagai string kosong

WHERE DATALENGTH(COLUMN) > 0 

Jika Anda ingin menghitung string yang seluruhnya terdiri dari spasi sebagai kosong

WHERE COLUMN <> '' 

Keduanya tidak akan mengembalikan NULLnilai saat digunakan dalam WHEREklausa. Seperti NULLakan mengevaluasi UNKNOWNuntuk ini daripada TRUE.

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''

Mengembalikan hanya satu baris A. Yaitu Baris dengan NULLatau string kosong atau string yang seluruhnya terdiri dari ruang semua dikecualikan oleh kueri ini.

SQL Fiddle


6
Mengapa tidak WHERE COALESCE(column, '') <> ''?
Lieven Keersmaekers

10
Karena jika columnmemiliki indeks, maka permintaan Anda mungkin tidak akan menggunakannya
Lamak

106
WHERE NULLIF(your_column, '') IS NOT NULL

Saat ini (4,5 tahun kemudian), untuk memudahkan manusia membaca, saya hanya akan menggunakan

WHERE your_column <> ''

Meskipun ada godaan untuk membuat centang nol eksplisit ...

WHERE your_column <> '' 
      AND your_column IS NOT NULL

... seperti yang ditunjukkan oleh @Martin Smith dalam jawaban yang diterima, itu tidak benar-benar menambahkan apa pun (dan saya secara pribadi menghindari SQL nulls sepenuhnya saat ini, jadi toh tidak akan berlaku bagi saya juga!).


15

Coalesce akan melipat nulls menjadi default:

COALESCE (fieldName, '') <> ''

8

dengan cara dasar

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

7

Cara ramah indeks untuk melakukan ini adalah:

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

Jika tidak ada banyak baris atau bidang ini tidak diindeks, Anda dapat menggunakan:

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

2

Anda dapat menggunakan salah satu dari ini untuk memeriksa string null, whitespace, dan kosong.

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

Periksa saja: di mana nilai> '' - bukan nol dan tidak kosong

-- 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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.