5

我试图弄清楚为什么下面的 SQL 语句在 oracle 中没有返回值 do

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

然而

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

返回值做。

4

2 回答 2

7

因为trim(' ')返回null而不是''

SQLFiddle 示例

在 Oracle 8 中,没有零长度字符串这样的东西。任何来自函数调用或文字 '' 的零长度字符串都被视为 null。

来源

于 2012-10-30T01:01:10.140 回答
1

零长度字符串被视为空值,您不能在 Oracle 中通过(不)等式比较空值,因为它们以特殊方式处理。

文档参考:条件中的 NULLS

因此,这个预期不起作用:

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 回答