Bagaimana kita dapat memeriksa dalam kondisi SQL Server WHEREapakah kolom tersebut tidak nol dan bukan string kosong ( '')?
Bagaimana kita dapat memeriksa dalam kondisi SQL Server WHEREapakah kolom tersebut tidak nol dan bukan string kosong ( '')?
Jawaban:
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.
columnmemiliki indeks, maka permintaan Anda mungkin tidak akan menggunakannya
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!).
Coalesce akan melipat nulls menjadi default:
COALESCE (fieldName, '') <> ''
dengan cara dasar
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
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
WHERE COALESCE(column, '') <> ''?