Oracle 中 decode 函数用法

本文详细介绍了 SQL 中的 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
decode(字段或字段的运算,值1,值2,值3)

       这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值2,否则返回值3
当然值1,值2,值3也可以是表达式,这个函数使得某些sql语句简单了许多

使用方法:

Select A1.V01301, To_Char(A1.d_Datetime, 'yyyy-mm-dd hh24:mi:ss') As d_Datetime, A1.d_File_Size, A1.V07021,
 A1.v_File_Name
From Rada_Chn_Dor_L3_St_Pd_f_Tab A1 Where 1 = 1 And A1.V01301 In ('Z9220') And A2.V01301 In ('Z9220') And
To_Date(Decode(Length(A1.V04001), 1, '0' || A1.V04001, A1.V04001) ||
              Decode(Length(A1.V04002), 1, '0' || A1.V04002, A1.V04002) ||
              Decode(Length(A1.V04003), 1, '0' || A1.V04003, A1.V04003) ||
              Decode(Length(A1.V04004), 1, '0' || A1.V04004, A1.V04004) ||
              Decode(Length(A1.V04005), 1, '0' || A1.V04005, A1.V04005) ||
              Decode(Length(A1.V04006), 1, '0' || A1.V04006, A1.V04006), 'yyyyMMddHH24miss') >=
To_Date('20080518153100', 'yyyyMMddHH24miss') And
To_Date(Decode(Length(A1.V04001), 1, '0' || A1.V04001, A1.V04001) ||
             Decode(Length(A1.V04002), 1, '0' || A1.V04002, A1.V04002) ||
             Decode(Length(A1.V04003), 1, '0' || A1.V04003, A1.V04003) ||
             Decode(Length(A1.V04004), 1, '0' || A1.V04004, A1.V04004) ||
             Decode(Length(A1.V04005), 1, '0' || A1.V04005, A1.V04005) ||
             Decode(Length(A1.V04006), 1, '0' || A1.V04006, A1.V04006), 'yyyyMMddHH24miss') <=
To_Date('20150518153100', 'yyyyMMddHH24miss') And A1.d_Data_Id = 'J.0004.0008.S001' And
A2.d_Data_Id = 'J.0004.0009.S001' And A1.v_File_Name_Source = A2.v_File_Name_Source And A1.V07021 = A2.V07021;

其中字段V04001为年,V04002为月,V04003为日,||表示拼接符(不是表示或);

以  Decode(Length(A1.V04002), 1, '0' || A1.V04002, A1.V04002)为例,

Length(A1.V04002)表示如果月字段的的长度为1的话,就取0和月值拼接后的数值,否则就取本身的月值,

比如月值为5,值的长度为1,那么最终的结果就为05;如果月值为05,最终的结果就为05,ToDate函数是将年月日时分秒拼接后的值格式化,然后与已知的时间值比较,取出在时间范围内的记录。

 

转载于:https://my.oschina.net/bigdataer/blog/424657

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值