美文网首页
Oracle的NVL函数的类型问题

Oracle的NVL函数的类型问题

作者: 阿乐_822e | 来源:发表于2023-03-22 14:17 被阅读0次

    问题来源:Oracle数据库A中有一个表B,其中有一个timestamp类型字段"register_time",现在要求得出系统时间与表中最新一条记录的差值(以分钟记);并且,当查询返回null时(表记录为空)返回0值
    问题解答:

    # 使用以下语句
    select NVL(round((sysdate - to_date(to_char(max(register_time),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS'))*24*60,2),0) as diff from A.B
    

    说明:

    1、24*60: 日期数相减,默认使用单位为“天”,故要化为分钟;

    2、round(exp1,exp2)函数:四舍五入,可指定小数位

    Round(125.455) : 125   
    Round(125.455,1) : 125.5
    # 当exp2为负数时,四舍五入的位数从小数点前开始计数,小数点前|exp2|位,看本位,进前一位,本位以及后面取0
    Round(125.455,-1) :130  Round(125.455,-2)   : 100
    

    3、NVL(exp1,exp2)

    nvl()函数用于从两个表达式返回一个非null值,语法为“nvl(exp1,exp2)”;若表达式1的计算结果为null值,则该函数返回表达式2的结果,否则返回表达式1的结果,也即:
    return exp1 is null ? exp2 : exp1
    这里特别要注意的是:exp2要与exp1的返回结果类型保持一致,返回可能会提示“ORA-00932:数据类型不一致”错误。
    如:select nvl(max(register_time),0) from A.B
    这条语句就会报错,原因就在于max(register_time)期望的结果是timestamp类型,而0却是number型

    相关文章

      网友评论

          本文标题:Oracle的NVL函数的类型问题

          本文链接:https://www.haomeiwen.com/subject/cigvrdtx.html