SQLサーバーで「Nullではなく、空ではない」文字列を確認する方法は?


202

SQL ServerのWHERE条件で、列がnullではなく空の文字列('')ではないかどうかを確認するにはどうすればよいですか?

回答:


304

空の文字列として「」のみを一致させたい場合

WHERE DATALENGTH(COLUMN) > 0 

スペースのみで構成される文字列を空としてカウントする場合

WHERE COLUMN <> '' 

これらの両方を句でNULL使用した場合、値は返されませんWHERENULLとして評価されるUNKNOWNこれらのためではなくTRUE

CREATE TABLE T 
  ( 
     C VARCHAR(10) 
  ); 

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

SELECT * 
FROM   T 
WHERE  C <> ''

単一の行のみを返しますA。すなわち、行とNULL空の文字列またはスペースで完全に構成される文字列はすべて、このクエリによって除外されています。

SQLフィドル


6
なんでWHERE COALESCE(column, '') <> ''
Lieven Keersmaekers、2011

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 nullを完全に回避しているので、とにかく私には適用されません!)。




7

これを行うためのインデックスフレンドリーな方法は次のとおりです。

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

行数が少ない場合、またはこのフィールドにインデックスが作成されていない場合は、次を使用できます。

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

2

これらのいずれかを使用して、null、空白、空の文字列をチェックできます。

WHERE COLUMN <> '' 

WHERE LEN(COLUMN) > 0

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

0

ただチェックしてください:where value> ''-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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.