SQL Server 2005 を使用しています。テキスト列を含むテーブルがあり、この列の値が null ではなく空の行がテーブルに多数あります。'' と比較しようとすると、次の応答が返されます。
データ型 text と varchar は、等しくない演算子では互換性がありません。
テキスト列の値が null ではなく空かどうかを判断する特別な関数はありますか?
SQL Server 2005 を使用しています。テキスト列を含むテーブルがあり、この列の値が null ではなく空の行がテーブルに多数あります。'' と比較しようとすると、次の応答が返されます。
データ型 text と varchar は、等しくない演算子では互換性がありません。
テキスト列の値が null ではなく空かどうかを判断する特別な関数はありますか?
where datalength(mytextfield)=0
ISNULL(
case textcolum1
WHEN '' THEN NULL
ELSE textcolum1
END
,textcolum2) textcolum1
実際には、LIKE 演算子を使用するだけです。
SELECT * FROM mytable WHERE mytextfield LIKE ''
SELECT * FROM TABLE
WHERE ISNULL(FIELD, '')=''
IS NULL 演算子を使用します。
Select * from tb_Employee where ename is null
この投稿が古いことは知っていますが、役に立ちました。
空でないテキストフィールドでレコードを返すという問題は解決しなかったので、解決策を追加すると思いました。
これは私のために働いたwhere句です。
WHERE xyz LIKE CAST('% %' as text)
DATALENGTHメソッドを使用します。次に例を示します。
SELECT length = DATALENGTH(myField)
FROM myTABLE
あなたは両方をしなければなりません:
SELECT * FROM Table WHERE Text IS NULL or Text LIKE ''
値が null または空の場合に定義済みのテキスト ("No Labs Available") を表示したかったので、友人がこれを手伝ってくれました:
StrengthInfo = CASE WHEN ((SELECT COUNT(UnitsOrdered) FROM [Data_Sub_orders].[dbo].[Snappy_Orders_Sub] WHERE IdPatient = @PatientId and IdDrugService = 226)> 0)
THEN cast((S.UnitsOrdered) as varchar(50))
ELSE 'No Labs Available'
END
この問題には代替案がたくさんあることは知っていますが、@Eric Z Beard & @Tim Cooper と @Enrique Garcia & @Uli Köhler が最良の解決策として見つけたものをまとめたいと思います。
以下のクエリは 0 ではなく 1 を返すため、ユース ケース シナリオでスペースのみが空と同じになる可能性があるという事実に対処する必要がある場合。
SELECT datalength(' ')
したがって、私は次のようなものに行きます:
SELECT datalength(RTRIM(LTRIM(ISNULL([TextColumn], ''))))
SUBSTRING (textColumn, 0, 1)に対してテストします
null と空の文字列は同等ですか? もしそうなら、アプリケーションにロジックを含めて(または、アプリが「すぐに使える」場合はトリガー?)、フィールドを強制的に null または '' にしますが、もう一方にはしません。'' を使用した場合は、列を NOT NULL に設定することもできます。単なるデータのクリーンさです。