Ric*_*ick 2 sqlite dll datetime
当使用DATETIME函数做一些算术时,我发现了以下行为:
选择DATETIME('现在',' - 1月','月初')
预期:2011-02-01 00:00:0
结果:2011-03-01 00:00:0 - 失败
选择DATETIME('现在',' - 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/version 1.0.66.0/Apr 18,2010
有人发现了这种行为吗?这是一个已知的错误?或者我做错了吗?
小智 6
代替:
SELECT datetime('now','-1 month','start of month');
Run Code Online (Sandbox Code Playgroud)
你有没有尝试过:
SELECT datetime('now','start of month','-1 month');
Run Code Online (Sandbox Code Playgroud)
我认为第二个总是给你上个月的第一天。如果当月的天数比上个月多,前者有时会给你当月的第一天。
now减1个月= 2月30日= 3月2日.然后start of month给你三月的开始.这可能不是任何人想要的行为,但它是文档描述的内容:访问http://www.sqlite.org/lang_datefunc.html并搜索"通过渲染工作".