Oracle Sql关于case-when,if-then,decode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle Sql关于case-when,if-then,decode相关的知识,希望对你有一定的参考价值。

  今天在采集58-二手市场数据时,遇到一个问题:网页的样式不够规范导致采到的数据奇形怪状,具体的数据表如下:

技术分享

这种数据不利于观察,也无法用于分析。我是用case-when来进行初步的清洗。(substr中的startindex和endindex需要自己数~)

select 
       case when t.condition like <!-- 成色 -->% then
         substr(t.condition, 20, length(t.condition) - 26) when
         t.condition like 成 色:% then
         substr(t.condition, 12, length(t.condition) - 18) else \\N END CONDITION,
         t.classification2,
       CASE WHEN T.RELEASE_DATE LIKE <li class="time" title="发布日期">% then 
          substr(t.release_date,31,length(t.release_date)-35) when
          t.release_date like <li class="time">% then
          substr(t.release_date,18,length(t.release_date)-22) when
          t.release_date like 更新时间% then
          substr(t.release_date,6,length(t.release_date))else \\N END release_date,
       case when t.price like <span%> then
          substr(t.price,27,length(t.price)-34) when
          t.price like %< then
          substr(t.price,27,length(t.price)-36)||SUBSTR(T.PRICE,LENGTH(T.PRICE)-2,LENGTH(T.PRICE)) WHEN 
          T.PRICE LIKE 价 格:% THEN 
          SUBSTR(T.PRICE,26,LENGTH(T.PRICE)-35) ELSE \\N END PRICE,
       CASE WHEN T.SELLERNAME LIKE linkman%‘‘‘ then
          substr(t.sellername,10,length(t.sellername)-10) when
          T.SELLERNAME LIKE linkman%> then
          substr(t.sellername,10,length(t.sellername)-185) else \\N end sellername
  from TABLENAME t

这样得到的数据就比较规范了:

技术分享

由此,可以总结下case-when的语法:

CASE WHEN condition1
THEN sentence1
WHEN condition2
THEN sentence2
...
ELSE
sentenceN
END

除此之外,还可以使用if-then-elif-else。

我一开始以为decode在这里不适用,因为DECODE(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

该函数的含义如下:
IF 条件=值1 THEN
    RETURN(翻译值1)
ELSIF 条件=值2 THEN
    RETURN(翻译值2)
......
ELSIF 条件=值n THEN
    RETURN(翻译值n)

ELSE
    RETURN(缺省值)
END IF

而我需要“条件 like 值”。

后来查阅资料发现:可以decode结合instr函数来实现“条件like 值”:

instr(str1,str2),意即如果str1中包含str2,返回str2在str1中的位置,否则返回0。

不过不推荐此种方法,因为只有Oracle中有decode 函数,放在其他数据库里就不好使了~

完。

 










以上是关于Oracle Sql关于case-when,if-then,decode的主要内容,如果未能解决你的问题,请参考以下文章

sql问题--case-when

SQL Select CASE-WHEN - 如何从电话号码中删除格式

oracle 关于条件判断

关于oracle循环语句的一个问题

关于oracle的事务中,如何判断一条语句是不是成功执行

使用 numpy 生成具有 case-when 条件的随机数据