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一样得到月份的第一天,一直递归,判断这个月的每一天是否是星期一。

  • 相关阅读:
    2016 大连网赛
    LightOJ 1012 简单bfs,水
    Pyhton学习——Day30
    Client初见——python
    Server初见——python
    Pyhton学习——Day29
    Pyhton学习——Day28
    Pyhton学习——Day27
    Pyhton学习——Day26
    函数基础作业
  • 原文地址:https://www.cnblogs.com/aoximin/p/12679057.html
Copyright © 2011-2022 走看看