0

非常に簡単に言えば、NOT NULLおよびNOT EmptyであるWHEREレコードを取得する句で、次のどの方法が適しているかを説明します。FIELD_NAME

WHERE DATALENGTH(FIELD_NAME) > 0

また

WHERE ISNULL(FIELD_NAME, '') <> ''

アップデート

最初の方法では、一部のタイプのフィールドで誤った結果が得られるとのことでした... 同意しますか?

4

7 に答える 7

4

まず、

select *
from table
where column <> ''

とまったく同じ結果が得られます

select *
from table
where isnull(column, '') <> ''

条件がUNKNOWNではなく であるレコードFALSEは引き続き除外されるためです。私は通常、最初のオプションを使用します。

DATALENGTHは末尾のスペースをカウントしますが、 との比較ではカウントし''ません。不等を と比較するかどうかは、あなた次第です 。その場合は、 が必要です。そうでない場合は、単に と比較してください。' '''DATALENGTH''

TEXT/NTEXTタイプの比較はサポートされていませんが、サポートされていることに注意してくださいDATALENGTH

于 2013-05-09T15:39:06.977 に答える
2

ISNULLの代わりに最良のアプローチですDATALENGTH

于 2013-05-09T15:18:23.300 に答える
1

次のいずれかを使用します。

where coalesce(field_name, '') <> ''

また

where field_name <> '' or field_name is not null

また

where field_name <> ''

1 つ目は標準 SQL (coalesce()標準でisnull()はなく) です。最後のものは最も明白ではありませんが、NULL は比較に失敗し、インデックスの使用を許可します。

于 2013-05-09T15:35:06.190 に答える
1

私は使うだろう

WHERE ISNULL(FIELD_NAME, '') <> ''

発生する可能性のある問題の 1 つは、スペースを含むレコードが返されないことです。そんなレコードをお探しですか?

DATALENGTH からの予期しない結果についてはわかりません。SQL Server が比較対象のレコードの長さの計算に時間を費やす必要がないように、ISNULL メソッドを使用します。両者の性能の違いはわかりません。

于 2013-05-09T15:31:14.683 に答える
1

「空ではない」条件にスペースが含まれる場合は、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
于 2013-05-09T15:39:11.810 に答える
0
RTRIM(LTRIM(ISNULL(FIELD_NAME, ''))) <> '' will handle spaces and NULLS
于 2013-05-09T15:39:02.977 に答える