在mysql中得到当前日期是当月第几周

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在mysql中得到当前日期是当月第几周相关的知识,希望对你有一定的参考价值。

具体需求是为了得出每个日期是当月的第几周。思路是如果当天是1号,则将周数变为1,如果遇到星期一,则周数+1。想问下图中的这个逻辑怎么变成sql语句来实现?

代码如下

    select group_date groupDate from (
    SELECT
    @cdate input_date,
    @last_sat := date_add(date_sub(date_sub(@cdate,interval  day(@cdate)-1 day),interval 1 month), interval 6-date_format(date_sub(date_sub(@cdate,interval  day(@cdate)-1 day),interval 1 month),\'%w\') day) last_sat,
    @this_sat := date_add(date_sub(@cdate,interval  day(@cdate)-1 day), interval 6-date_format(date_sub(@cdate,interval  day(@cdate)-1 day),\'%w\') day) this_sat,
    @next_sat := date_add(date_add(date_sub(@cdate,interval  day(@cdate)-1 day),interval 1 month), interval 6-date_format(date_add(date_sub(@cdate,interval  day(@cdate)-1 day),interval 1 month),\'%w\') day) next_sat,
    @last_point := if(day(@last_sat)-3>0,date_sub(@last_sat,interval 7 day),@last_sat) last_point,
    @this_point := if(day(@this_sat)-3>0,date_sub(@this_sat,interval 7 day),@this_sat) this_point,
    @next_point := if(day(@next_sat)-3>0,date_sub(@next_sat,interval 7 day),@next_sat) next_point ,
    case
    when @cdate >= @last_point and @cdate < @this_point then
    concat(
    \'W\',
    datediff(@cdate,@last_point) div 7 + 1, \'/\',
    year(@cdate),\'-\',
    if(month(@last_sat)>=10,month(@last_sat),concat(\'0\',month(@last_sat)))
    )
    when @cdate >=@this_point and @cdate < @next_point then
    concat(
    \'W\',
    datediff(@cdate,@this_point) div 7 + 1,\'/\',
    year(@cdate),\'-\',
    if(month(@this_sat)>=10,month(@this_sat),concat(\'0\',month(@this_sat))))
    else
    concat(
    \'W\',
    datediff(@cdate,@next_point) div 7 + 1,\'/\',
    year(@cdate),\'-\',if(month(@next_sat)>=10,month(@next_sat),concat(\'0\',month(@next_sat))))
    end
    group_date
    from  (SELECT @cdate := #inputDate) as gd
    );
参考技术A -- 查询当前日期是本月第几周
(DAY(create_date)+WEEKDAY(create_date-INTERVAL DAY(create_date) DAY)) DIV 7 + 1
参考技术B 这也需要写这么长的语句吗?
两个条件啊 1号开始到 第一个周一是第一周
其他的顺延呗
也就是一号在的那周就是当月的第一周
那你在的那周按照一号的那周建一下就是周号了啊
比如 1号是13周的周五
你是18号是十六周的周一 那你可定是15-13+1 第3周啊
有啥问题吗?
参考技术C weekofyear(curdate()) 这个出来不就是这一年的第几周
然后再按照月份分组排序下就好了

以上是关于在mysql中得到当前日期是当月第几周的主要内容,如果未能解决你的问题,请参考以下文章

js获取当前日期第几周

如何计算当前日期是当年的第几周

获取当前日期是一年中的第几周

SQL取日期为当前月份的第几周思路

SQL取日期为当前月份的第几周思路

Python中如何计算当前日期是今年第几周?