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

时间:2009-11-25 22:11:16

标签: sql date date-arithmetic ansi-sql

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

答案必须是ANSI SQL。

4 个答案:

答案 0 :(得分:6)

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;
祝你好运!

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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