【发布时间】:2019-11-02 01:00:28
【问题描述】:
我正在尝试从 SQLite 中的日期获取ISO week number。当我尝试几个日期时,它给出了错误的周数。
例如:
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')
【问题讨论】:
-
您希望第一个的周数是多少?
-
当然你的第二个返回一个从 2018 开始的字符串......第一个
strftime()确保了这一点。如果那个 sn-p 产生了'2019-1;,那就真的坏了。 -
@Shawn 感谢回复,如果日期是 2018-12-31,我希望输出是 2019-01。
-
你将不得不在你的问题中更好地解释你的推理。 2018 年的日期如何成为 2019 年的日期?为什么你从周数到年+?日、月、周,什么?
-
@Shawn 很抱歉缺少信息,我正在尝试获取 ISO 周数,根据 ISO 周标准,2018-12-31 恰好是 2019 年的第一周。更新了问题。
标签: sqlite datetime week-number