日期:2014-05-16  浏览次数:20758 次

有没有好心人,帮帮忙
需要比较A,B 两个时间类型的字段,

当A为空时,取B值;
当B为空时,取A值;
A与B比较时,取小的那个值。

怎么写啊,好心人,帮帮忙吧!!!
------解决方案--------------------
decode(greatest(a,b),a,b,b,a)
和你说一下原理哈。。这个函数是比大小取大值。。另外因为如果ab存在null时候该函数返回null.
所以放在decode里面做相反取值非常合适。
谁大就去另一个值,谁是null也是取另一个值。。
------解决方案--------------------
snbxp的可以有。
------解决方案--------------------
1 GREATEST 返回值列表中最大值
    格式: GREATEST(value1, value2, value3, ...)
    含义: 返回value列表最大的值。
               value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
               当value值列表中有一个为NULL,则返回NULL值。
    EXAMPLE: select greatest (1, 3, 2 ) from dual ; -- 返回3
                     select greatest ( 'A', 'B', 'C' ) from dual ; -- 返回C
                     select greatest (null, 'B', 'C' ) from dual ; -- 返回null
                     select greatest (t.empno, t.mgr ) from  scott.emp t ; -- 返回empno和mgr 较大值
2. LEAST 返回值列表中最小值
    格式: LEAST(value1, value2, value3, ...)
    含义: 返回value列表最小的值。
               value列表必须是相同类型,也可以是一个表的同一行、不同列的值进行比较。
               当value值列表中有一个为NULL,则返回NULL值。
    EXAMPLE: select least (1, 3, 2 ) from dual ; -- 返回1
                     select least ( 'A', 'B', 'C' ) from dual ; -- 返回A
                     select least (null, 'B', 'C' ) from dual ; -- 返回null
                     select least (t.empno, t.mgr ) from  scott.emp t ; -- 返回empno和mgr 较小值
nvl(a,b)----如果a is null 则就取b
select least(nvl(null,'b'),nvl(null,'a')) from dual结果就是a