วิธีการที่เราสามารถตรวจสอบใน SQL Server WHERE
สภาพไม่ว่าจะเป็นคอลัมน์ที่ไม่ได้เป็นโมฆะและไม่ได้เป็นสตริงที่ว่างเปล่า ( ''
)?
วิธีการที่เราสามารถตรวจสอบใน SQL Server WHERE
สภาพไม่ว่าจะเป็นคอลัมน์ที่ไม่ได้เป็นโมฆะและไม่ได้เป็นสตริงที่ว่างเปล่า ( ''
)?
คำตอบ:
หากคุณต้องการจับคู่ "" เป็นสตริงว่าง
WHERE DATALENGTH(COLUMN) > 0
หากคุณต้องการนับสตริงใด ๆ ที่มีช่องว่างทั้งหมดว่างเปล่า
WHERE COLUMN <> ''
ทั้งสองนี้จะไม่ส่งคืนNULL
ค่าเมื่อใช้ในWHERE
ข้อ ในฐานะที่NULL
จะประเมินเป็นเหล่านี้มากกว่าUNKNOWN
TRUE
CREATE TABLE T
(
C VARCHAR(10)
);
INSERT INTO T
VALUES ('A'),
(''),
(' '),
(NULL);
SELECT *
FROM T
WHERE C <> ''
A
ส่งคืนเพียงแถวเดียว เช่นแถวที่มีNULL
หรือสตริงว่างเปล่าหรือสตริงที่ประกอบด้วยช่องว่างทั้งหมดจะไม่รวมอยู่ในแบบสอบถามนี้
column
มีดัชนีแล้วคำถามของคุณอาจจะไม่ใช้เลย
WHERE NULLIF(your_column, '') IS NOT NULL
ทุกวันนี้ (4.5 ปี) เพื่อให้มนุษย์อ่านง่ายขึ้นฉันก็จะใช้
WHERE your_column <> ''
ในขณะที่มีสิ่งล่อใจที่จะทำให้การตรวจสอบ null ชัดเจน ...
WHERE your_column <> ''
AND your_column IS NOT NULL
... เนื่องจาก @Martin Smith แสดงให้เห็นในคำตอบที่ยอมรับแล้วมันไม่ได้เพิ่มอะไรเลย (และโดยส่วนตัวแล้วฉันหลีกเลี่ยง SQL nulls อย่างสิ้นเชิงในปัจจุบันดังนั้นมันจึงไม่สามารถใช้ได้กับฉันเลย!)
รวมตัวกันจะพับเป็นโมฆะเป็นค่าเริ่มต้น:
COALESCE (fieldName, '') <> ''
ในวิธีพื้นฐาน
SELECT *
FROM [TableName]
WHERE column_name!='' AND column_name IS NOT NULL
วิธีการทำดัชนีที่เป็นมิตรคือ:
where (field is not null and field <> '')
หากไม่มีแถวจำนวนมากหรือฟิลด์นี้ไม่ได้จัดทำดัชนีคุณสามารถใช้:
where isnull(field,'') <> ''
คุณสามารถใช้หนึ่งในวิธีเหล่านี้เพื่อตรวจสอบสตริงว่างและช่องว่าง
WHERE COLUMN <> ''
WHERE LEN(COLUMN) > 0
WHERE NULLIF(LTRIM(RTRIM(COLUMN)), '') IS NOT NULL
เพียงตรวจสอบ: โดยที่ค่า> '' - ไม่ใช่ค่าว่างและไม่ว่างเปล่า
-- 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, '') <> ''
ล่ะ