17,086
社区成员
我们知道一般的日期相减是这样的
select TO_DATE('2008-05-02 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -TO_DATE('2008-04-30 23:59:59', 'yyyy-mm-dd hh24-mi-ss') from dual
但是我现在想获得当前日期减去某张表某个字段得到相差的天数,该怎么写啊,必须from dual吗
这个查询中dual,其实跟查询中的信息是和表没有直接关系的,那么就是说,只要能得到一行数据就能够替换dual;
1 比如表tabA只有一行数据,可以改写为:
select TO_DATE('2008-05-02 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -TO_DATE('2008-04-30 23:59:59', 'yyyy-mm-dd hh24-mi-ss') from tabA;
2 比如tabB是多行数据,查询中的信息是和表还是没有直接关系,但是会有多行返回,那么也可以更改另种方法处理:
2-1,distinct去重
select distinct TO_DATE('2008-05-02 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -TO_DATE('2008-04-30 23:59:59', 'yyyy-mm-dd hh24-mi-ss') from tabB;
2-2,返回一行
select TO_DATE('2008-05-02 00:00:00', 'yyyy-mm-dd hh24-mi-ss') -TO_DATE('2008-04-30 23:59:59', 'yyyy-mm-dd hh24-mi-ss') from tabB where rownum = 1;
select to_number(a-b)*24 from c
dual是万能表 不是一定要用dual,但是用别的表会出来很多行重复的
用系统时间减去转后后的日期格式就可以计算相差的天数。