要从两个不同的表中减去两个日期,得到语法错误

时间:2019-04-29 14:00:49

标签: sql oracle oracle10g

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 个答案:

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