在 PostgreSQL 中,“1 个月”的间隔有时算作 30 天,有时算作 31 天。确定这一点的标准是什么?
我运行了以下查询来证明我的困惑。
select
now() - interval '1 month'
, now() - interval '30 days'
, interval '30 days' = interval '1 month'
, interval '31 days' = interval '1 month'
Run Code Online (Sandbox Code Playgroud)
查询返回:
2022-03-27 21:09:30.933434+00 | 2022-03-28 21:09:30.933434+00 | true | false
我希望查询返回 3 月 28 日的两天,因为一个月的间隔等于 30 天的间隔。
Adr*_*ver 12
归结为具体与一般,哪里day是具体,month哪里不是。同样的情况也发生在day和hour中:
select '2022-03-13 12:00 PDT'::timestamptz - '1 day'::interval;
?column?
------------------------
2022-03-12 12:00:00-08
select '2022-03-13 12:00 PDT'::timestamptz - '24 hours'::interval;
?column?
------------------------
2022-03-12 11:00:00-08
Run Code Online (Sandbox Code Playgroud)
DST 发生在 PST/PDT 的上午2022-03-13。因此,一天被概括为一天前的同一时间,而 24 小时前实际上是 24 小时过去。
在你的情况下:
select
now() - interval '1 month'
, now() - interval '30 days';
?column? | ?column?
-------------------------------+-------------------------------
2022-03-27 14:44:33.515669-07 | 2022-03-28 14:44:33.515669-07
Run Code Online (Sandbox Code Playgroud)
将1 month返回到一个月前的同一日期和时间,而30 days实际返回到 30 天。
在这种情况下:
select '2022-03-30 21:17:05'::timestamp - interval '1 month' ;
?column?
---------------------
2022-02-28 21:17:05
Run Code Online (Sandbox Code Playgroud)
2 月没有 30 日,因此实际的月底是 28 日。
| 归档时间: |
|
| 查看次数: |
1750 次 |
| 最近记录: |