วิธีตรวจสอบไม่ว่างเปล่าและไม่ใช่สตริงว่างในเซิร์ฟเวอร์ SQL?


202

วิธีการที่เราสามารถตรวจสอบใน SQL Server WHEREสภาพไม่ว่าจะเป็นคอลัมน์ที่ไม่ได้เป็นโมฆะและไม่ได้เป็นสตริงที่ว่างเปล่า ( '')?

คำตอบ:


303

หากคุณต้องการจับคู่ "" เป็นสตริงว่าง

WHERE DATALENGTH(COLUMN) > 0 

หากคุณต้องการนับสตริงใด ๆ ที่มีช่องว่างทั้งหมดว่างเปล่า

WHERE COLUMN <> '' 

ทั้งสองนี้จะไม่ส่งคืนNULLค่าเมื่อใช้ในWHEREข้อ ในฐานะที่NULLจะประเมินเป็นเหล่านี้มากกว่าUNKNOWNTRUE

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''

Aส่งคืนเพียงแถวเดียว เช่นแถวที่มีNULLหรือสตริงว่างเปล่าหรือสตริงที่ประกอบด้วยช่องว่างทั้งหมดจะไม่รวมอยู่ในแบบสอบถามนี้

ซอ Fiddle


6
ทำไมWHERE COALESCE(column, '') <> ''ล่ะ
Lieven Keersmaekers

10
เพราะถ้าcolumnมีดัชนีแล้วคำถามของคุณอาจจะไม่ใช้เลย
Lamak

106
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 อย่างสิ้นเชิงในปัจจุบันดังนั้นมันจึงไม่สามารถใช้ได้กับฉันเลย!)




7

วิธีการทำดัชนีที่เป็นมิตรคือ:

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

หากไม่มีแถวจำนวนมากหรือฟิลด์นี้ไม่ได้จัดทำดัชนีคุณสามารถใช้:

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

2

คุณสามารถใช้หนึ่งในวิธีเหล่านี้เพื่อตรวจสอบสตริงว่างและช่องว่าง

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

เพียงตรวจสอบ: โดยที่ค่า> '' - ไม่ใช่ค่าว่างและไม่ว่างเปล่า

-- 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.