路过的,请假下下!关于ORACLE的DECODE的,多谢哦
路过的大虾,请假下下!关于ORACLE的DECODE的,谢谢哦!
各位大虾,请教下面第一句正确,第二句为什么会报无效数字的错误呢?现行谢过!
SELECT --正确
decode(sign(length(T.VALUE_DATE)-8),0,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY'),1,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY'),T.VALUE_DATE) VALUE_DATE
FROM T
SELECT --报错:无效数字
decode(sign(length(T.VALUE_DATE)-8),-1,T.VALUE_DATE,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY')) VALUE_DATE
FROM T
------解决方案--------------------
对不起,看错了。。。
decode返回什么类型是根据then部分来决定的,所以最后的to_char()部分会转换为number类型,
就出错了,
如果改成下面就应该没有问题
各位大虾,请教下面第一句正确,第二句为什么会报无效数字的错误呢?现行谢过!
SELECT --正确
decode(sign(length(T.VALUE_DATE)-8),0,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY'),1,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY'),T.VALUE_DATE) VALUE_DATE
FROM T
SELECT --报错:无效数字
decode(sign(length(T.VALUE_DATE)-8),-1,T.VALUE_DATE,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY')) VALUE_DATE
FROM T
------解决方案--------------------
对不起,看错了。。。
decode返回什么类型是根据then部分来决定的,所以最后的to_char()部分会转换为number类型,
就出错了,
如果改成下面就应该没有问题
SELECT
decode(sign(length(T.VALUE_DATE)-8),-1,T.VALUE_DATE,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DDMMYYYY')) VALUE_DATE
FROM T
--或者
SELECT decode(sign(length(T.VALUE_DATE)-8),-1,to_char(T.VALUE_DATE),to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY')) VALUE_DATE
FROM T