我有一个简单的 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(使用前将#替换为@)