想从两个不同的表中减去两个日期,出现语法错误
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。如果您期望一个正值,则反转子查询的顺序,并添加一个。
【讨论】:
以上是关于想从两个不同的表中减去两个日期,出现语法错误的主要内容,如果未能解决你的问题,请参考以下文章