gpt4 book ai didi

postgresql - 如何在 SQLite 和 PostgreSQL 中获得相同的日期?

转载 作者:行者123 更新时间:2023-11-29 12:24:15 25 4
gpt4 key购买 nike

当前日期:2018-03-29

在 SQLite 中,select date('now','-1 month') 返回 2018-03-01,而 select date('2018- 03-30','-1 month') 返回 2018-03-02 等等,我知道为什么。

在 Postgres 中,以下所有返回 2018-02-28:

select date('2018-03-28') - interval '1 month'
select date('2018-03-29') - interval '1 month'
select date('2018-03-30') - interval '1 month'
select date('2018-03-31') - interval '1 month'

如何在 SQLite 中获得相同的行为?

最佳答案

老实说 - 我认为你做不到。更确切地说,我认为您不应该

SQLite 在日期算法方面的工作方式不同;它不是计算最接近的人类月份,而是computes by rendering the date strings provided .

...Note that "±NNN months" works by rendering the original date into the YYYY-MM-DD format, adding the ±NNN to the MM month value, then normalizing the result. Thus, for example, the data 2001-03-31 modified by '+1 month' initially yields 2001-04-31, but April only has 30 days so the date is normalized to 2001-05-01. A similar effect occurs when the original date is February 29 of a leapyear and the modifier is ±N years where N is not a multiple of four.

这完全打破了理性思维;距离 3 月 31 日还有 1 个月就是 4 月 30 日,距离 3 月 31 日还有一个月就是(最接近的)2 月 28 日。 SQLite 作弊并给出了这个的渲染和规范化版本,这通常足够接近,但不准确。

所以最终,我认为您无法在这里解决这个问题。不是两个不同的 DBMS 解决方案以不同的方式计算日期。

这提出了一个问题,即您为什么一开始就使用不同的 DBMS。更好的解决方案将针对您要实现的目标;如果您在 SQLite 中进行了测试,但您的生产系统在 Postgres 中,您应该改为在 Postgres 中设置测试。

关于postgresql - 如何在 SQLite 和 PostgreSQL 中获得相同的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49561873/

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