主頁 > 知識(shí)庫 > SQL語句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法

SQL語句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法

熱門標(biāo)簽:400外呼系統(tǒng)合法 寧波人工外呼系統(tǒng)有效果嗎 怎樣把地圖標(biāo)注導(dǎo)入公司地址 地圖標(biāo)注一個(gè)圓圈怎么用 真人語音電銷機(jī)器人 如何在地圖標(biāo)注自己店鋪 洛陽外呼系統(tǒng)平臺(tái) 電銷機(jī)器人被曝光 廣州人工電銷機(jī)器人費(fèi)用

/*
因?yàn)楣ぷ髦幸粋€(gè)奇怪的需求,要用SQL語言計(jì)算兩個(gè)日期間有多少個(gè)工作日。
設(shè)定是一個(gè)星期有5個(gè)工作日,從星期一到星期五
說明:
  第一個(gè)星期的工作日數(shù):DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天
  末一個(gè)星期的工作日數(shù):DATEPART(dw, @enddt),最多5天
計(jì)算方法:
  如果兩個(gè)日期處在同一個(gè)星期內(nèi),直接計(jì)算“第一個(gè)星期的工作日數(shù)”
  否則按下面的公式計(jì)算
    (兩個(gè)日期間的總天數(shù) - 第一個(gè)星期的天數(shù) - 末一個(gè)星期的天數(shù)) / 7 * 5
  + 第一個(gè)星期的工作日數(shù)
  + 末一個(gè)星期的工作日數(shù)
*/

 --計(jì)算并返回兩個(gè)日期間的工作小時(shí)數(shù)(工作日*8)按周一到周五計(jì)算
--必須先SET DATEFIRST 1
CREATE FUNCTION dbo.CalcWorkHours(@bdate DATETIME, @edate DATETIME)
 RETURNS INTEGER
AS BEGIN
 DECLARE @hours INTEGER
 IF @@DATEFIRST > 1 OR @bdate > @edate
  RETURN -1
 SELECT @hours =
     --如果終止日期與起始日期在同一個(gè)星期內(nèi),只需要計(jì)算有幾天即可
     CASE WHEN DATEPART(wk, @edate-1)-DATEPART(wk,@bdate) = 0 THEN
          CASE WHEN DATEPART(dw, @bdate) > 5 THEN 0
            WHEN DATEPART(dw, @edate-1) > 5 THEN 6 - DATEPART(dw, @bdate)
            ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
       --如果終止日期與起始日期在不同的星期內(nèi)
       --首先計(jì)算出除前后兩個(gè)星期外完整的星期數(shù) * 5
       ELSE (DATEDIFF(dd,@bdate,@edate)
             - (8-DATEPART(dw, @bdate))
             - DATEPART(dw, @edate-1)) / 7 * 5
          --再加上第一個(gè)星期里的工作日數(shù)
         + CASE WHEN DATEPART(dw, @bdate)  6 THEN 6 - DATEPART(dw, @bdate)
            ELSE 0 END
          --加上末一個(gè)星期里的工作日數(shù)
         + CASE WHEN DATEPART(dw, @edate-1)>5 THEN 5 ELSE DATEPART(dw, @edate-1) END
     END * 8
 RETURN @hours
END

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。

您可能感興趣的文章:
  • 通過SQLSERVER重啟SQLSERVER服務(wù)和計(jì)算機(jī)的方法
  • 利用php+mysql來做一個(gè)功能強(qiáng)大的在線計(jì)算器
  • 在php和MySql中計(jì)算時(shí)間差的方法
  • mysql 字符串長(zhǎng)度計(jì)算實(shí)現(xiàn)代碼(gb2312+utf8)
  • SQL2005CLR函數(shù)擴(kuò)展-深入環(huán)比計(jì)算的詳解
  • SQLSERVER 根據(jù)地圖經(jīng)緯度計(jì)算距離差示例
  • 用sql實(shí)現(xiàn)18位身份證校驗(yàn)代碼分享 身份證校驗(yàn)位計(jì)算
  • SQL計(jì)算字符串中最大的遞增子序列的方法
  • 如何計(jì)算多個(gè)訂單的核銷金額

標(biāo)簽:北海 珠海 石家莊 晉中 咸寧 東營(yíng) 南昌 煙臺(tái)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL語句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法》,本文關(guān)鍵詞  SQL,語句,計(jì)算,兩個(gè),日期,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《SQL語句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于SQL語句計(jì)算兩個(gè)日期之間有多少個(gè)工作日的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章