select to_date(to_char(MIN (logical_date), 'YYYYMMDD'), 'YYYYMMDD')from table_1
- to_date(to_char(MIN (due_date) ,'YYYYMMDD'),'YYYYMMDD') FROM table_2
1 回答
2
您可以减去两个子查询的结果,每个子查询都从其中一个表中获取最小日期;整个查询运行在dual(内置的单行表对这类事情非常有用):
-- CTEs for your sample data
with table_1 (logical_date) as (select date '2019-05-01' from dual),
table_2 (due_date) as (select date '2019-05-15' from dual)
-- actual query
select (select to_date(to_char(min(logical_date), 'YYYYMMDD'), 'YYYYMMDD') from table_1)
- (select to_date(to_char(min(due_date) ,'YYYYMMDD'),'YYYYMMDD') from table_2)
as diff
from dual;
DIFF
----------
-14
但是您不需要在字符串之间进行转换,您可以这样做:
select (select min(logical_date) from table_1) - (select min(due_date) from table_2) as diff
from dual;
除非您的日期包含非午夜时间部分,在这种情况下,您的结果中会得到一小部分天数;只获得全天的结果,或者将结果舍入/截断/地板/天花板,或者trunc()在减去之前将两个时间分量设置为午夜 - 你所做的取决于你想要如何处理这些小数天。
如果您期望该差异为 -15,则从结果中减去 1。如果您期望一个正值,则反转子查询的顺序,并添加一个。
于 2019-04-29T14:35:25.177 回答