5

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

答案必须是 ANSI SQL。

4

4 回答 4

7

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

<extract expression> 对日期时间或间隔进行操作,并返回一个精确的数值,该数值表示日期时间或间隔的一个组成部分的值。

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

这是这样做的“真实”方式。

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

祝你好运!

于 2009-11-25T22:31:48.453 回答
3

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

于 2009-11-25T22:26:29.357 回答
1

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

于 2009-11-25T22:25:24.900 回答
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 支持:

  • 甲骨文 9i+
  • MySQL
  • Postgres
于 2009-11-25T22:30:22.383 回答