【问题标题】:SQLite returns inappropriate week numberSQLite 返回不适当的周数
【发布时间】: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


【解决方案1】:

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

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。

【讨论】:

    猜你喜欢
    • 2013-02-11
    • 2018-12-03
    • 1970-01-01
    • 2023-03-03
    • 2021-12-02
    • 1970-01-01
    • 2014-03-14
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多