当前位置: 代码迷 >> Oracle开发 >> max (DECODE (.date) 没有返回最大的日期,该如何解决
  详细解决方案

max (DECODE (.date) 没有返回最大的日期,该如何解决

热度:613   发布时间:2016-04-24 06:33:40.0
max (DECODE (..date) 没有返回最大的日期
select  max (DECODE (dis_id, NULL, NULL, transaction_date) from T,
当dis_id 都不为null的时候 没有返回最大的日期。
其实
select  DECODE (dis_id, NULL, NULL, transaction_date) from T

select transaction_date from T 
返回的数据是一样的
但是使用
select  max ( transaction_date) from T
可以返回最大的日期 而
select  max (DECODE (dis_id, NULL, NULL, transaction_date) from T
却不能返回最大的日期。

欢迎各位给见议,谢谢!
------解决思路----------------------
select max(DECODE(dis_id,null,null,transaction_date))
from(
select sysdate transaction_date,1 dis_id from dual
union all
select sysdate-2,null dis_id from dual)


反馈结果是:27-11月-14

不应该没有返回最大的日期呀
------解决思路----------------------
用decode来判断空值有点奇怪,不知道是否和版本支持有关
可以替换成nvl2(dis_id, transaction_date,null)
------解决思路----------------------
引用:
select max(DECODE(dis_id,null,null,transaction_date))
from(
select sysdate-20 transaction_date,1 dis_id from dual
union all
select sysdate-2000, 2 dis_id  from dual
union all
select sysdate-200, 3 dis_id  from dual
union all
select sysdate-201, 12 dis_id  from dual
union all
select sysdate-21, 20 dis_id  from dual
)就返回11-MAY-14,而不是最大的07-NOV-14

decode(a,b,c,d)
里面,c和d类型要一致,你这里c为null,被当成了字符串,于是d发生了隐式转换:to_char(transaction_date)
对于字符串来说,11-MAY-14要比07-NOV-14大
  相关解决方案