含义解释:
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函数是将年月日时分秒拼接后的值格式化,然后与已知的时间值比较,取出在时间范围内的记录。