首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >比较Oracle情况下的字符串时

比较Oracle情况下的字符串时
EN

Stack Overflow用户
提问于 2017-01-20 07:24:18
回答 2查看 8K关注 0票数 2

我对甲骨文有异议。

代码语言:javascript
复制
SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' != ''
            THEN '7C54D3E133830A78E040A8C010014B7D'
            WHEN 'e84a4433966c4b8996ce34905acff63d' != ''
            THEN 'e84a4433966c4b8996ce34905acff63d'
            WHEN '7faa9126b1c6412fa58375ab2b2be1db' != ''
            THEN '7faa9126b1c6412fa58375ab2b2be1db'
            ELSE NULL
 END
 FROM DUAL

这个查询总是返回null,不过很明显,结果应该是第一个情况。我是不是遗漏了甲骨文中的字符串比较?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-20 07:29:42

您正在检查空字符串的字符串,因此有问题;在Oracle中,最好检查字符串is not null

代码语言:javascript
复制
SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' is not null
            THEN '7C54D3E133830A78E040A8C010014B7D'
            WHEN 'e84a4433966c4b8996ce34905acff63d' is not null
            THEN 'e84a4433966c4b8996ce34905acff63d'
            WHEN '7faa9126b1c6412fa58375ab2b2be1db' is not null
            THEN '7faa9126b1c6412fa58375ab2b2be1db'
            ELSE NULL
 END
 FROM DUAL 

关于甲骨文对待空字符串和空字符串的方式,here可以找到更多的东西

举个例子:

代码语言:javascript
复制
select q'['' = '']'         , case when '' = ''            then 'YES' else 'NO' end from dual union all
select q'['' is null]'      , case when '' is null         then 'YES' else 'NO' end from dual union all 
select q'['' = null ]'      , case when '' = null          then 'YES' else 'NO' end from dual union all 
select q'[null = null]'     , case when null = null        then 'YES' else 'NO' end from dual union all 
select q'[null is null]'    , case when null is null       then 'YES' else 'NO' end from dual union all 
select q'['' != '']'        , case when '' != ''           then 'YES' else 'NO' end from dual union all
select q'['' is not null]'  , case when '' is not null     then 'YES' else 'NO' end from dual union all
select q'['' != null ]'     , case when '' != null         then 'YES' else 'NO' end from dual union all
select q'[null != null]'    , case when null != null       then 'YES' else 'NO' end from dual union all
select q'[null is not null]', case when null is not null   then 'YES' else 'NO' end from dual

给予:

代码语言:javascript
复制
'' = ''           NO
'' is null        YES
'' = null         NO
null = null       NO
null is null      YES
'' != ''          NO
'' is not null    NO
'' != null        NO
null != null      NO
null is not null  NO

总之,在谈到NULL时,唯一可以依赖的检查是:IS [NOT] NULL

票数 9
EN

Stack Overflow用户

发布于 2017-01-20 07:38:56

那么,这种行为的原因是甲骨文没有空字符串,而是null;这就是为什么

代码语言:javascript
复制
   select case when 'abc' != ''  
      ....

实际上是

代码语言:javascript
复制
   select case when 'abc' != null

因为anything != nullnull (truefalsenull布尔逻辑),所以when不返回trueelse也被执行。正确的语法是

代码语言:javascript
复制
   SELECT CASE WHEN '7C54D3E133830A78E040A8C010014B7D' IS NOT NULL
               THEN '7C54D3E133830A78E040A8C010014B7D'
               WHEN 'e84a4433966c4b8996ce34905acff63d' IS NOT NULL
               THEN 'e84a4433966c4b8996ce34905acff63d'
               WHEN '7faa9126b1c6412fa58375ab2b2be1db' IS NOT NULL
               THEN '7faa9126b1c6412fa58375ab2b2be1db'
               ELSE NULL
          END
     FROM DUAL
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41758158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档