SQLite 返回错误的 2013 年周数?

2024-05-18

我有一个简单的 SQL 来计算 SQLite 报告中的周数

SELECT STRFTIME('%W', 'date_column')

2009-2012 年的数据是正确的。 2013 年我总是得到错误的周数。

例如

SELECT STRFTIME('%W', '2012-02-28')

返回“09”,这是正确的。

SELECT STRFTIME('%W', '2013-02-28')

返回“08”,这是错误的。我们已经第九周了。

SQLite 日期时间函数中有什么我不明白的吗?或者是 SQLite 的一个错误?


CL的答案对于OP对“正确”的定义来说效果很好,这与ISO的定义不太一样。 ISO 周数始终在 1-53 范围内(没有周 0),一年的最后 3 天可能属于下一年的第 1 周,就像前 3 天可能属于下一年的第 52 或 53 周一样。前一年。要考虑这些极端情况,您需要执行以下操作:

SELECT
    (strftime('%j', date(MyDate, '-3 days', 'weekday 4')) - 1) / 7 + 1 AS ISOWeekNumber
FROM MyTable;

作为旁注,SQLite 的日期和时间 http://www.sqlite.org/lang_datefunc.html文档确实链接到POSIX 时间 http://pubs.opengroup.org/onlinepubs/007908799/xsh/strftime.html手册页,定义了%W修饰符为: ”一年中的周数(星期一为一周的第一天),十进制数 [00,53]。新年第一个星期一之前的所有日子都被视为第 0 周。"

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQLite 返回错误的 2013 年周数? 的相关文章

随机推荐