2011-12-28 10 views

答えて

164

あなただけ一致させたい場合は、「」あなたは空

WHERE COLUMN <> '' 

としてのスペースで完全に構成される任意の文字列をカウントしたい場合は、これらの両方がNULLを返しませんがWHERE句で使用された場合の値。 NULLは、TRUEではなく、UNKNOWNと評価されます。

CREATE TABLE T 
    ( 
    C VARCHAR(10) 
); 

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

SELECT * 
FROM T 
WHERE C <> '' 

ただ1行Aを返します。私。 NULLの行または空の文字列または完全にスペースで構成される文字列は、このクエリによってすべて除外されます。

SQL Fiddle

+3

なぜ、WHERE COALESCE(列、 '')<> '' 'はありませんか? –

+6

'column'にインデックスがある場合、クエリはおそらくそれを使用しません – Lamak

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

今日で(上の4.5年)、それが簡単に人間が読んでできるようにすること、作るために誘惑があるが、私はちょうど

WHERE your_column <> '' 

を使用しますヌルチェックは明示的に...

WHERE your_column <> '' 
     AND your_column IS NOT NULL 

... @Martin Smithは受け入れられた答えを示しているので、実際には何も追加しません(私は個人的にはSQL NULLを完全に避けていますので、とにかく私には当てはまりません)。

9

合体はデフォルトにNULL値を折るます:

COALESCE (fieldName, '') <> '' 
2

この状態は「NULL、空または空白」を実行しますLTRIMRTRIMの不要な文字列操作なしで、確認してください。

SELECT 
      * 
    FROM 
      [Table] 
    WHERE 
      COALESCE(PATINDEX('%[^ ]%', [Value]), 0) > 0 
4

これを行うための指標に優しい方法は次のとおりです。

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

そこに多くの行がないか、またはこのフィールドがインデックス化されていない場合は、あなたが使用することができます。

where isnull(field,'') <> '' 
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 
3

基本的な方法で

SELECT * 
FROM [TableName] 
WHERE column_name!='' AND column_name IS NOT NULL 
関連する問題