我需要一种在SQL中确定两个日期之间天数的方法。
答案必须符合ANSI SQL标准。
答案必须符合ANSI SQL标准。
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;
祝你好运!
我相信SQL-92标准支持使用“-”运算符对两个日期进行减法计算。
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 支持以下数据库:
SELECT GETDATE() - (GETDATE() - 5)
=>1900-01-06 00:00:00.000
- Jonas Elfströmgetdate() - getdate()
根据 SQL 标准应返回0
而不是1900-01-01
。 - user330315