gpt4 book ai didi

sql - 为什么 age() 的结果在回到过去时并不总是等于间隔?

转载 作者:行者123 更新时间:2023-11-29 12:16:37 27 4
gpt4 key购买 nike

我在 PostgreSQL 9.6 转折日期计算中遇到了我的 SQL 代码的一些意外行为。在分析时,我发现 Postgres 不会总是返回相同的值返回 n 天,然后用 age() 计算持续时间。

考虑这段代码:我们将某一天设置为“基准”,回溯 45 天,然后计算持续时间。

WITH basedate AS (SELECT '2018-05-01'::date AS b), 
myperiod AS (SELECT (basedate.b - interval '45 days') AS "startDate",
basedate.b AS "endDate" FROM basedate)
SELECT age("endDate","startDate") FROM myperiod;

我希望此查询始终在 45 天 内产生结果。但是,如果我将 basedate 更改为 2018-06-01,我将得到 44 天

为什么会这样?

我猜这与 May 有 31 天有某种关系。但是,我无法准确解释原因,因为如果我更改 45 天<,2018-05-012018-06-01 将导致相同的持续时间15 天

最佳答案

这不完全正确。

您的第一个查询返回

      age      
---------------
1 mon 15 days
(1 row)

如果您将日期修改为2018-06-01,您会得到

      age      
---------------
1 mon 14 days
(1 row)

两者都是正确的,不是吗?

问题是 PostgreSQL 在像 justify_interval 这样的函数中将一个月视为 30 天:

SELECT justify_interval('45 days');

justify_interval
------------------
1 mon 15 days
(1 row)

但是,另一种方法是抛出一个错误,并且该行为会被清楚地记录下来。

关于sql - 为什么 age() 的结果在回到过去时并不总是等于间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50675464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com