sqlite - SQLite DATETIME 函数中的 '-1 month' 是 'broken' 吗?

标签 sqlite datetime dll

使用 DATETIME 函数进行一些算术运算时,我发现了以下行为:

选择日期时间('现在','-1个月','月初')
预计:2011-02-01 00:00:0
结果:2011-03-01 00:00:0 - 失败

选择日期时间('现在','-2个月','月初')
预计:2011-01-01 00:00:0
结果:2011-01-01 00:00:0 - 好的

这似乎只是从昨天开始发生,我的集成测试发现了这一点。我的猜测是减去的月份以天为单位计算,并且以某种方式使用了最后一个月的天数(而不是当前天数)。上个完整月,2 月有 28 天,因此结果)

这可以通过更改 DATETIME 函数的输入顺序轻松解决,如下所示:DATETIME('now', 'start of month', '-1 month'),但它仍然是棘手的行为并且可能导致错误不被注意。

我正在使用 System.Data.SQLite.DLL/版本 1.0.66.0/2010 年 4 月 18 日

有没有其他人发现这种行为?这是一个已知的错误?还是我“做错了”?

最佳答案

now 减去一个月 = 2 月 30 日 = 3 月 2 日。然后 start of month 为您提供三月的开始。这可能不是任何人想要的行为,但这是文档所描述的:转到 http://www.sqlite.org/lang_datefunc.html 并搜索“通过渲染工作”。

关于sqlite - SQLite DATETIME 函数中的 '-1 month' 是 'broken' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5485813/

相关文章:

android - SD 卡上的 SQLite 数据库

ios - 如何将多个 NSString 类型的值一起传递给一个查询?

ios - 在 iOS 上使用 sqlite 和 grand central dispatch

c# - 将字符串转换为格式为 yyyy-MM-dd HH :mm:ss in C# 的日期时间

java - LocalDateTime 解析错误(Java 8)

C# 应用程序和汇编 hell !

java - SQLite删除列: Using temporary table vs Renaming using ALTER TABLE的方法

python - to_datetime 不显示时间戳

c++ - 如何在 cpp 项目的 makefile 中添加 dll 的引用()

c++ - CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS不涵盖全局变量