5

以下の SQL ステートメントがオラクルで値 do を返さない理由を理解しようとしています。

Select 'do' from dual
where trim('  ') = ''

一方

Select 'do' from dual
where trim(' a ')='a'

値 do を返します。

4

2 に答える 2

7

trim(' ')返品nullではなく''

SQLFiddle の例

Oracle 8 には、長さゼロの文字列はありません。関数呼び出しまたはリテラル '' からの長さ 0 の文字列は、null として扱われます。

ソース

于 2012-10-30T01:01:10.140 に答える
1

長さゼロの文字列は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>                                              
于 2012-10-30T02:43:02.170 に答える