首页 > 解决方案 > SQLite 返回不适当的周数

问题描述

我正在尝试从 SQLite 中的日期获取ISO 周数。当我尝试几个日期时,它给出了错误的周数。

例如:

SELECT STRFTIME('%W', '2018-12-31')

返回 53。

但是,有一个解决方案建议使用以下代码:

SELECT strftime('%Y', '2018-12-31 00:00:00') || '-' || ( (strftime('%j', date('2018-12-31 00:00:00', '-3 days', 'weekday 4')) - 1) / 7 + 1) as week

返回2018-1但预期结果是2019-1因为根据 ISO 周数* 2018-12-31 落在 2019 年的第一周。

在 SQLite 中获得正确 ISO 周数的正确方法是什么?

*根据 ISO-8601 标准的周数,从星期一开始的周数。一年中的第一周是包含该年第一个星期四的那一周(='First 4-day week')

标签: sqlitedatetimeweek-number

解决方案


这个解决方案给了我期待的一年。

select strftime('%Y', date('2018-12-31 00:00:00', '-3 days', 'weekday 4'))2019年回归。

strftime('%Y', date('2018-12-31 00:00:00', '-3 days', 'weekday 4')) || '-' || ( (strftime('%j', date(time, '-3 days', 'weekday 4')) - 1) / 7 + 1) as week

返回预期结果,2019-1。


推荐阅读