【问题标题】:Does not count the week number correctly没有正确计算周数
【发布时间】:2022-01-06 20:48:56
【问题描述】:

在 SQL 查询中,我使用每周分组。但不幸的是,它显示的数据不正确。在新的一年,由于某种原因,设置了错误的周数。 1 月 1 日是 2021 - 52 周(2021-52),但 SQL 认为它是新的 - 2022 年 0 周(2022-00)。 是否可以通过某种检查或日期转换来解决这个问题? (例如,如 php strtotime 'Monday this week')

select
    DATE_FORMAT(if(bso.STATUS_ID in ("N", "A", "R", "T", "Z"), if(isnull(bso.comments), "2222-01-01 00:00:01", "2222-01-02 00:00:01"), cast(bso.DATE_INSERT as DATE)), "%d.%m.%Y") as `DATE`,
    DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(if(bso.STATUS_ID in ("N", "A", "R", "T", "Z"), if(isnull(bso.comments), "2222-01-01 00:00:01", "2222-01-02 00:00:01"), cast(bso.DATE_INSERT as DATE)), "%d.%m.%Y"), "%d.%m.%Y"), "%Y-%u") as `WEEK`
from `b_sale_basket` bsb
    left join b_sale_order bso on bso.ID = bsb.ORDER_ID
    left join b_iblock_element bie on bie.id = bsb.PRODUCT_ID
    left join b_sale_order_props_value as bsopvs on bsopvs.`ORDER_ID`=bso.`ID` and bsopvs.`CODE`="SOURCE"
where not isnull(bsb.ORDER_ID) 
    and bso.`DATE_INSERT` >= "2021-12-27 00:00:00" and bso.`DATE_INSERT` <= "2022-01-02 23:59:59"
    and bso.`CANCELED`!="Y"
    and bie.IBLOCK_ID = 1
group by DATE_FORMAT(STR_TO_DATE(DATE, "%d.%m.%Y"), "%Y-%u")

输出:

附: 2222日期是正确的,需要过滤掉,不关注。 我会提前感谢您的提示

【问题讨论】:

标签: mysql


【解决方案1】:

对于您使用%u 表示周数的日期格式,确实允许为0。您可以考虑使用%v,但缺点是年份仍然是2022,因为它是由一个单独的%Y 说明符。

解决方法是先将日期转换为the first day of the week it is in,然后格式化那个日期。

【讨论】:

  • 谢谢你。我转换日期并获取该日期的星期一并按此日期分组。
猜你喜欢
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
相关资源
最近更新 更多