5
*(datediff(@e,
@s)div7)+
mid(
'0123444401233334012222340111123400012345001234550',7
* weekday(@s)
+ weekday(@e)
+1,1
)
計算開始日期@s和結束日期@e之間的工作日數。
假設結束日期(@e)不在開始日期之前(@s)。與datediff相容,因為相同的開始日期和結束日期為零工作日。忽略假期。
數字串的構造如下。建立乙個開始日和結束日的表,行必須以星期一(weekday 0)開頭,列也必須以星期一開始。從左上角到右下角填寫對角線,全部為0(即星期一到星期一,星期二和星期二之間有0個工作日,等等)。對於每天從對角線開始(必須始終為0)並填寫右側的列,一次一天。如果您在週末(非工作日)列登陸,則工作日數不會更改,而是從左側開始。否則,工作日數會增加乙個。當你到達行迴圈的末尾回到同一行的開頭並繼續直到你再次到達對角線。然後繼續下一行。
例如,假設週六和週日不是工作日 -
| m t w t f s s
m| 0 1 2 3 4 4 4
t| 4 0 1 2 3 3 3
w| 3 4 0 1 2 2 2
t| 2 3 4 0 1 1 1
f| 1 2 3 4 0 0 0
s| 1 2 3 4 5 0 0
s| 1 2 3 4 5 5 0
然後將表中的49個值連線到字串中。
如果您發現任何錯誤,請告訴我。
-edit改進表:
| m t w t f s s
m| 0 1 2 3 4 4 4
t| 4 0 1 2 3 3 3
w| 3 4 0 1 2 2 2
t| 2 3 4 0 1 1 1
f| 1 2 3 4 0 0 0
s| 0 1 2 3 4 0 0
s| 0 1 2 3 4 4 0
改進的字串:『0123444401233334012222340111123400001234000123440』
表達改善:
5
*(datediff(@e,
@s)div7)+
mid(
'0123444401233334012222340111123400001234000123440',7
* weekday(@s)
+ weekday(@e)
+1,1
)
**: mysql日期範圍查詢(兩個日期之間的記錄)
最近常用到mysql的datetime型別的日期範圍搜尋,總結有以下幾種方式可以,可以查詢精確到秒之間的記錄。字串日期可以直接和datetime型別之間比較,無需轉換,mysql會將字串型別日期轉換成長整型數字進行比較,當然你也可以轉換為同一型別後再比較 mysql日期與字串轉換函式 字串轉日期 s...
mysql計算兩個日期範圍之間的所有日期
如果有許可權對資料庫進行修改操作可以使用以下方法生成日期 create table num i int insert into num i values 0 1 2 3 4 5 6 7 8 9 select adddate 2018 01 01 numlist.id as date from sel...
獲取兩個日期之間天數
本人根據開發經驗,目前總結了3種方法 第一種 根據兩個日期間毫秒數計算,同理任何日期型別都可以轉換為對應的毫秒數 public static int daysbetween long time1,long time2 第二種 jdk8 localdate提供了toepochday 方法 1 將日期d...