两个日期之间的天数 - ANSI SQL

Posted

技术标签:

【中文标题】两个日期之间的天数 - ANSI SQL【英文标题】:Number of days between two dates - ANSI SQL 【发布时间】:2010-12-20 11:51:27 【问题描述】:

我需要一种方法来确定 SQL 中两个日期之间的天数。

答案必须是 ANSI SQL。

【问题讨论】:

【参考方案1】:

ANSI SQL-92 将 DATE - DATE 定义为返回 INTERVAL 类型。您应该能够使用与从 DATE 中提取标量相同的方法从 INTERVALS 中提取标量,使用 EXTRACT 函数(4.5.3)。

作用于 日期时间或间隔并返回 表示的确切数值 日期时间的一个组成部分的值 或间隔。

但是,这在大多数数据库中实现得很差。您可能无法使用特定于数据库的东西。 DATEDIFF 在不同平台上实现得非常好。

这是“真正”的做法。

SELECT EXTRACT(DAY FROM DATE '2009-01-01' - DATE '2009-05-05') FROM DUAL;

祝你好运!

【讨论】:

【参考方案2】:

我不记得使用不支持 DATE1-DATE2 的 RDBMS,SQL 92 似乎同意。

【讨论】:

SQL Server 不支持 确实如此:SELECT GETDATE() - (GETDATE() - 5) => 1900-01-06 00:00:00.000 getdate() - getdate() 应该根据 SQL 标准返回 0 而不是 1900-01-01【参考方案3】:

我相信 SQL-92 标准支持使用“-”运算符减去两个日期。

【讨论】:

【参考方案4】:

SQL 92 支持以下语法:

t.date_1 - t.date_2

EXTRACT 函数也是 ANSI,但在 SQL Server 上不受支持。示例:

ABS(EXTRACT(DAY FROM t.date_1) - EXTRACT(DAY FROM t.date_2)

将计算包装在绝对值函数中可确保得出的值为正值,即使较小的日期是第一个日期。

EXTRACT 支持:

Oracle 9i+ mysql Postgres

【讨论】:

如果您在减法之前从 DATE 中提取,则仅当两个日期在同一月份时计算才有效。 除了 EXTRACT,MS SQL server 也不支持两个日期之间的减法运算。 "操作数数据类型日期对于减法运算符无效。"

以上是关于两个日期之间的天数 - ANSI SQL的主要内容,如果未能解决你的问题,请参考以下文章

利用SQL语句如何获得两个日期之间相差的天数

利用SQL语句如何获得两个日期之间相差的天数

如何在 oracle sql 中提取两个日期之间的天数?

显示当前日期和两个特定日期之间天数的 SQL 查询

SQL 计算两个日期相差多少天数的函数

SQL SERVER:获取两个日期之间的总天数