问题来源: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型
网友评论