非常に簡単に言えば、NOT NULLおよびNOT EmptyであるWHERE
レコードを取得する句で、次のどの方法が適しているかを説明します。FIELD_NAME
WHERE DATALENGTH(FIELD_NAME) > 0
また
WHERE ISNULL(FIELD_NAME, '') <> ''
アップデート
最初の方法では、一部のタイプのフィールドで誤った結果が得られるとのことでした... 同意しますか?
非常に簡単に言えば、NOT NULLおよびNOT EmptyであるWHERE
レコードを取得する句で、次のどの方法が適しているかを説明します。FIELD_NAME
WHERE DATALENGTH(FIELD_NAME) > 0
また
WHERE ISNULL(FIELD_NAME, '') <> ''
最初の方法では、一部のタイプのフィールドで誤った結果が得られるとのことでした... 同意しますか?
まず、
select *
from table
where column <> ''
とまったく同じ結果が得られます
select *
from table
where isnull(column, '') <> ''
条件がUNKNOWN
ではなく であるレコードFALSE
は引き続き除外されるためです。私は通常、最初のオプションを使用します。
DATALENGTH
は末尾のスペースをカウントしますが、 との比較ではカウントし''
ません。不等を と比較するかどうかは、あなた次第です 。その場合は、 が必要です。そうでない場合は、単に と比較してください。' '
''
DATALENGTH
''
TEXT
/NTEXT
タイプの比較はサポートされていませんが、サポートされていることに注意してくださいDATALENGTH
。
ISNULL
の代わりに最良のアプローチですDATALENGTH
。
次のいずれかを使用します。
where coalesce(field_name, '') <> ''
また
where field_name <> '' or field_name is not null
また
where field_name <> ''
1 つ目は標準 SQL (coalesce()
標準でisnull()
はなく) です。最後のものは最も明白ではありませんが、NULL は比較に失敗し、インデックスの使用を許可します。
私は使うだろう
WHERE ISNULL(FIELD_NAME, '') <> ''
発生する可能性のある問題の 1 つは、スペースを含むレコードが返されないことです。そんなレコードをお探しですか?
DATALENGTH からの予期しない結果についてはわかりません。SQL Server が比較対象のレコードの長さの計算に時間を費やす必要がないように、ISNULL メソッドを使用します。両者の性能の違いはわかりません。
「空ではない」条件にスペースが含まれる場合は、nullif
select case when nullif(' ', '') is null then 'y' else 'n' end
y
declare @d varchar(50)
set @d = null
select case when nullif(@d, '') is null then 'y' else 'n' end
y
RTRIM(LTRIM(ISNULL(FIELD_NAME, ''))) <> '' will handle spaces and NULLS