取日期所在周的最后一天,遇到的问题
SELECT DATE_SUB(curdate(),
    INTERVAL WEEKDAY(curdate())
        - 5 DAY) AS week_end_date;
SELECT DATE_SUB('2019-01-06',
    INTERVAL WEEKDAY('2019-01-06')
        - 5 DAY) AS week_end_date;


第一条,取今天还是没有问题的;

但部分日期,周的最后一天比日期还早……

如“2019-01-06”、“2019-01-13”……

大神们有什么好的取周最后一天的方法吗?

按【周日-周六】为1周


感谢tinydata~~~最终形式如下

SELECT DATE_SUB(
        SUBDATE(DATE('2019-02-01'),
        DATE_FORMAT('2019-02-01', '%w') -7),
        INTERVAL 1 DAY)


gavindexu 发布于 2019-1-15 16:22 (编辑于 2019-1-16 09:45)
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共1回答
最佳回答
0
tinydataLv4见习互助
发布于2019-1-15 17:32

select subdate(date('2019-01-06')-1,date_format('2019-01-06','%w')-7)

由于从周日开始计数,而不是从周一,所以subdate() 开始处-1 向前进一天

  • gavindexu gavindexu(提问者) 这样的话,每个月的1号都挂了?
    2019-01-16 09:13 
  • tinydata tinydata 回复 gavindexu(提问者) 按照周计算的,和月又没有关系。
    2019-01-16 09:17 
  • gavindexu gavindexu(提问者) 回复 tinydata 可日期改成2019-01-01,或者其他每个月的第一天,就是空结果
    2019-01-16 09:19 
  • tinydata tinydata 回复 gavindexu(提问者) select subdate(date(\'2019-01-31\'),date_format(\'2019-01-31\',\'%w\') -7 ) - 1; 先取一周的 周日,之后再 - 1。
    2019-01-16 09:29 
  • 2关注人数
  • 955浏览人数
  • 最后回答于:2019-1-16 09:45
    请选择关闭问题的原因
    确定 取消
    返回顶部