以下の SQL ステートメントがオラクルで値 do を返さない理由を理解しようとしています。
Select 'do' from dual
where trim(' ') = ''
一方
Select 'do' from dual
where trim(' a ')='a'
値 do を返します。
trim(' ')
返品null
ではなく''
Oracle 8 には、長さゼロの文字列はありません。関数呼び出しまたはリテラル '' からの長さ 0 の文字列は、null として扱われます。
長さゼロの文字列はnullとして扱われ、Oracleでは特別な方法で扱われるため、(不)等式を通じてnullを比較することはできません。
ドキュメントリファレンス:条件のNULL
したがって、これは期待どおりに機能しません。
Select 'do' from dual where trim(' ') = ''
代わりにこれを試してください:
10:39:58 SYSTEM@dwh-prod> select * from dual where trim(' ') is null
10:40:02 2 /
D
-
X
Elapsed: 00:00:00.07
10:40:04 SYSTEM@dwh-prod> select * from dual where '' is null
10:40:11 2 /
D
-
X
Elapsed: 00:00:00.02
10:40:11 SYSTEM@dwh-prod>