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
答案 0 :(得分: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。如果期望一个正值,则颠倒子查询的顺序,然后添加一个。