当前位置:Gxlcms >
数据库问题 >
Oracle Sql关于case-when,if-then,decode
Oracle Sql关于case-when,if-then,decode
时间:2021-07-01 10:21:17
帮助过:17人阅读
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
标签:函数 ssi dex like 返回 end ret sub .com