想从两个不同的表中减去两个日期,出现语法错误

Posted

技术标签:

【中文标题】想从两个不同的表中减去两个日期,出现语法错误【英文标题】:want to substract two dates from two different tables, getting syntax error 【发布时间】:2019-04-29 14:00:49 【问题描述】:
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

【问题讨论】:

您的查询毫无意义。因此,您的问题也不是。请提供样本数据和期望的结果。 假设我在 table_1 中有 D1 日期,在 table_2 中有 D2 日期,那么我如何找出这两个日期(D1 和 D2)的天数。如果 D1=1/05/2019 和 D2=15/05/2019 那么结果应该是 D1-D2=15 您的查询结构与the legal syntax 不匹配,因此您得到一个错误并不奇怪,但说出您得到的 what 错误会很有帮助 - 在此情况,大概是“ORA-00933:SQL命令未正确结束”? 单个select 语句不能有两个单独的from 子句。在学习日期算术之前,您似乎需要花更多时间了解 SQL 语句的基本元素。 【参考方案1】:

您可以减去两个子查询的结果,每个子查询都从其中一个表中获取最短日期;整个查询针对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。如果您期望一个正值,则反转子查询的顺序,并添加一个。

【讨论】:

以上是关于想从两个不同的表中减去两个日期,出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章

从sql中的表中减去两个日期

SQL多表链接查询、嵌入SELECT语句的子查询技术

我想从 2 个不同的表中进行连接查询,我想从两个表中输出

如何从数据库中的两个不同表中减去?

在 sp_UpdateStockItemAmount 上出现 inteccorect 语法错误

在不同的表中返回最近的日期