在ORACLE SQL的where子句中使用空字符串修剪

时间:2012-10-30 00:57:41

标签: sql oracle

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

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

在哪里

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

返回值do。

2 个答案:

答案 0 :(得分:7)

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

SQLFiddle example

  

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

Source

答案 1 :(得分:1)

零长度字符串被视为null,并且您无法通过Oracle中的(in)相等比较空值,因为它们以特殊方式处理。

文档参考:NULLS in conditions

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

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>