zoukankan      html  css  js  c++  java
  • sql 语句系列(月份的第一个星期的星期一和最后一个星期的星期一)[八百章之第二十一章]

    mysql

    select y.first_monday,CASE MONTH(ADDDATE(y.first_monday,28)) 
    when mth then ADDDATE(y.first_monday,28) 
    else ADDDATE(y.first_monday,21) end last_monday
    from(
    select case sign(DAYOFWEEK(x.dy)-2)
           when 0  then x.dy
           when -1 then ADDDATE(x.dy,ABS(DAYOFWEEK(x.dy)-2))
           when 1  then ADDDATE(x.dy,(7-(DAYOFWEEK(x.dy)-2))) END first_monday, mth  
    from(
    select DATE_ADD(CURRENT_DATE,INTERVAL -DAY(CURRENT_DATE)+1 DAY) dy,MONTH(CURRENT_DATE) mth
    from T1
    ) x
    ) y
    

    解析:
    在前一章中介绍了:

    select DATE_ADD(CURRENT_DATE,INTERVAL -DAY(CURRENT_DATE)+1 DAY) dy,MONTH(CURRENT_DATE) mth
    from T1
    

    为获取这个月的第一天。
    case sign(DAYOFWEEK(x.dy)-2)
    when 0 then x.dy
    when -1 then ADDDATE(x.dy,ABS(DAYOFWEEK(x.dy)-2))
    when 1 then ADDDATE(x.dy,(7-(DAYOFWEEK(x.dy)-2))) END first_monday, mth
    因为DAYOFWEEK 可以获取星期数值,星期六为7,星期天为1 ,星期1为2。

    这里判断第一天是不是星期一,如果是星期天,也就是-1,那么下一天就是星期一。
    如果是星期二到星期六,那么就算,下一个星期一是多少。

    select y.first_monday,CASE MONTH(ADDDATE(y.first_monday,28)) 
    when mth then ADDDATE(y.first_monday,28) 
    else ADDDATE(y.first_monday,21) end last_monday
    

    这一段是我们已经获取了第一个星期的星期一。
    那么最后一个星期一,要不就是加28,4个星期,要不就是加21,3个星期。

    sql server

    with x(dy,mth,is_monday)as (
    select temp.dy,temp.mth,case when DATEPART(DW,temp.dy)=2 then 1 else 0 end
    from(
    select DATEADD(day,-day(GETDATE())+1,GETDATE()) dy,MONTH(GETDATE()) mth
    from T1
    ) temp
    union all
    select dateadd(DAY,1,x.dy),mth,case when 
    DATEPART(dw,dateadd(day,1,x.dy))=2 then 1 else 0 end
    from x
    where MONTH(DATEADD(DAY,1,dy))=mth
    )
    
    select MIN(x.dy) first_month,MAX(x.dy) last_month
    from x
    

    sql server 使用递归。和mysql一样得到月份的第一天,一直递归,判断这个月的每一天是否是星期一。

  • 相关阅读:
    图片的通道数和卷积核的深度
    神经网络中使用Batch Normalization 解决梯度问题
    python3没有urllib2 出现报错:语法错误
    pip安装时ReadTimeoutError解决办法
    我的学习
    动态(不定长)数组初始化
    关于c中的一些新函数
    排序算法
    vc6.0批量加注释
    endnote的安装和使用必备的几个步骤(简单有效整理版)
  • 原文地址:https://www.cnblogs.com/aoximin/p/12679057.html
Copyright © 2011-2022 走看看