日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【mysql】获取指定日期是当年第几周,指定日期所在周的开始和结束日期

發布時間:2023/12/8 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【mysql】获取指定日期是当年第几周,指定日期所在周的开始和结束日期 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

最近在刷mysql的題目,遇到指定日期是當年第幾周的問題。

解決

0、總結

先總結,具體使用和區別看下文:

# 一、返回第幾周 select date_format('2023-01-01','%v') # 返回52,字符樣式是小寫,星期一是一周的第一天,# 2023年的新的星期還沒開始,# 返回了2022年的第52周,實際上是2023年的第0周 select date_format('2023-01-01','%V') # 返回01,大寫,星期天是一周的第一天 select week('2023-01-01', 0) # 返回1,這里week函數的第二個參數[0,1,2]的區別在下文提到 select week('2023-01-01', 1) # 返回0 select week('2023-01-01', 2) # 返回1 # 二、返回一周開始和結束 # 1、星期日為一周的開始 select date(now()) as date, date(subdate(now(), date_format(now(), '%w'))) as weekStart,date(subdate(now(), (date_format(now(), '%w')-6))) as weekEnd;# 2、星期一為一周的開始 select date(now()) as date,date(subdate(now(), (date_format(now(), '%w')+6)%7)) as weekStart,date(subdate(now(), (date_format(now(), '%w')-7)%7)) as weekEnd

1、返回第幾周

方法1:使用date_format函數

select date_format('2023-01-01','%v') #返回52,小寫,星期一是一周的第一天,2023年的新的星期還沒開始,返回了2022年的第52周,實際上是2023年的第0周 select date_format('2023-01-01','%V') #返回01,大寫,星期天是一周的第一天

第二個參數的字符樣式:
凡是與周有關的樣式
小寫的為星期一是一周的第一天;大寫的都為星期日是一周的第一天;(記憶:西方人基督教有禮拜日,耶穌為大(大寫))

方法2:使用week函數

select week('2023-01-01', 0) # 返回1 select week('2023-01-01', 1) # 返回0 select week('2023-01-01', 2) # 返回1

代碼運行結果:

week()函數使用:

week(符合時間格式的要求的日期或字符串,模式[0,1,2])
當模式為0時,對照模式表可以得知其計算邏輯是:把星期日當做一周的第一天,且第一周是以2023年的第一個星期日開始的,且在2023年的第一個星期日前那些屬于2023年的天數都歸為第0周。而2023年1月1日剛好是2023年第一個星期日,所以返回的結果是1。

當模式為1時,對照模式表可以得知其計算邏輯是:把星期一當做一周的第一天,且1月1日到本年第一個周一的天數超過3天,則認定這幾天處于本年的第1周,若天數沒超過3天(不足4天),則認定這幾天處于本年的第0周。而2023年1月1日到第一個周一(2023年1月2日)只有1天。所以認定2023年1月1日屬于2023年的第0周,所以返回的結果為0。

當模式為2時,對照模式表可以得知其計算邏輯是:把星期日當做一周的第一天,且第一周是以該年的第一個星期日開始的,前面的日期都算作上年度的最后一周(而模式0則是把這幾天算作為第0周)。這里以2021年為例,2021年1月2日是2021年第一個星期日之前日期,所以認定這幾天屬于2020年的最后一周(2020年的第52周),所以select week('2021-01-02',3)返回的結果為52。

2、指定日期所在周的開始和結束日期

參考:mysql小知識:根據指定日期,獲取是當年第幾周,但是當指定日期為星期天時有bug,稍加修改符合要求

# 星期日為一周的開始 select date(now()) as date, date(subdate(now(), date_format(now(), '%w'))) as weekStart,date(subdate(now(), (date_format(now(), '%w')-6))) as weekEnd;# 星期一為一周的開始 select date(now()) as date,date(subdate(now(), (date_format(now(), '%w')+6)%7)) as weekStart,date(subdate(now(), (date_format(now(), '%w')-7)%7)) as weekEnd

subdate函數用法:
??subdate(當前日期,指定天數),日期的減法,返回當前日期-指定天數的日期,
??如select subdate('2022-06-26',3)返回的是2022-06-23,因為2022-06-26-3=2022-06-23

結果示例:
星期日為一周的開始

星期一為一周的開始

總結

以上是生活随笔為你收集整理的【mysql】获取指定日期是当年第几周,指定日期所在周的开始和结束日期的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。