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

6
我需要一种在SQL中确定两个日期之间天数的方法。
答案必须符合ANSI SQL标准。
4个回答

8

ANSI SQL-92 规定 DATE - DATE 返回一个 INTERVAL 类型。你可以使用与从 DATE 中提取标量相同的方法从 INTERVAL 中提取标量,使用适当的 EXTRACT 函数(4.5.3)。

<extract expression> 作用于日期时间或间隔,返回表示日期时间或间隔一部分值的精确数值。

然而,在大多数数据库中实现非常不好。你可能会被限制使用某些特定于数据库的东西。DATEDIFF 在不同平台上的实施相当不错。

以下是“真正”的做法。

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

祝你好运!


3

我记不得使用过不支持DATE1-DATE2的关系型数据库,而SQL 92似乎也同意这一点。


SQL Server 不支持该操作。 - user330315
看起来是这样的: SELECT GETDATE() - (GETDATE() - 5) => 1900-01-06 00:00:00.000 - Jonas Elfström
1
getdate() - getdate() 根据 SQL 标准应返回 0 而不是 1900-01-01 - user330315

1

我相信SQL-92标准支持使用“-”运算符对两个日期进行减法计算。


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

2
如果在减法运算之前从日期中提取,那么计算只有在两个日期在同一个月份时才有效。 - Monkey Boson
除了EXTRACT之外,MS SQL服务器还不支持两个日期之间的减法运算符。 “操作数数据类型日期对于减法运算符无效。” - chugadie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接