两个日期之间的天数 - 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的主要内容,如果未能解决你的问题,请参考以下文章