Sql server 查詢指定時間區間工作日數、休息日數等日期操作

来源:http://www.cnblogs.com/xbhp/archive/2017/02/18/6412059.html
-Advertisement-
Play Games

1、查詢指定時間區間的工作日 這個主要難點是法定節假日,國家的法定節假日每年都不一樣,還涉及到調休,所以我們設計一個假日表。主要欄位有年份,類型(是否調休),假期日期。如下: 添加好當年的假期和調休日期 寫個方法計算出除開法定假日的工作日 執行這個表值函數後加上調休日和減去法定假日就是工作日了,大家 ...


1、查詢指定時間區間的工作日

這個主要難點是法定節假日,國家的法定節假日每年都不一樣,還涉及到調休,所以我們設計一個假日表。主要欄位有年份,類型(是否調休),假期日期。如下:

 CREATE TABLE [dbo].[Holidays](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Holiday] [datetime2](7) NULL,--假期日期

[YearS] [char](4) NULL,--年份
[daytype] [int] NULL--類型

)

  

添加好當年的假期和調休日期

寫個方法計算出除開法定假日的工作日

ALTER FUNCTION [dbo].[GetWorkerDays]

(

-- Add the parameters for the function here

 @StartTime DATETIME, -- 起始時間

 @EndTime DATETIME -- 結束時間,查詢預設小於此時間

)

RETURNS INT

AS

BEGIN 

DECLARE @Total INT;

DECLARE @Temp INT;

DECLARE @Days INT;

DECLARE @Index INT;

SET @Days = DATEDIFF(DAY,@StartTime,@EndTime);

SET @Index = 0;

SET @Temp = 0;

SET @Total = 0;

WHILE @Index < @Days BEGIN 

SET @Temp = DatePart(WEEKDAY,DATEADD(DAY,@Index,@StartTime));

IF @Temp > 1 AND @Temp < 7 BEGIN 

SET @Total = @Total + 1;

END 

SET @Index = @Index + 1;

END 

RETURN ISNULL(@Total,0)

END

 

  

執行這個表值函數後加上調休日和減去法定假日就是工作日了,大家可以再寫一個存儲過程。

 

2,計算指定日期段的休息日

這個跟那個相反,就是星期天加上法定假日在減去調休日

我們寫一個函數

ALTER FUNCTION GetRestDays

(

@StartTime DATETIME2,

@EndTime DATETIME2

)

RETURNS INT

AS

BEGIN

DECLARE @LegalRest INT --法定假期

DECLARE @AdjustmentDay INT--調休上班時間

DECLARE @SurplusDay INT --剩餘工作日

DECLARE @CountDay INT --總共天數

 

SELECT @LegalRest=COUNT(0) FROM dbo.Holidays WHERE daytype=1 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) 

AND Holiday>=@StartTime AND Holiday<=@EndTime

 

SELECT  @AdjustmentDay=COUNT(0) FROM dbo.Holidays WHERE daytype=2 AND  YearS=YEAR(GETDATE()) AND MONTH(Holiday)=MONTH(GETDATE()) 

AND Holiday>=@StartTime AND Holiday<=@EndTime

 SET @SurplusDay= [dbo].[GetWorkerDays](@StartTime,DATEADD(DAY,1,@EndTime))--剩餘工作日

 SELECT @CountDay=COUNT(0) FROM dbo.TimeSpanDays(@StartTime ,DATEADD(DAY,1,@EndTime))  --總共天數  計算出 時間段總共天數

 return @CountDay-@SurplusDay+@LegalRest-@AdjustmentDay

END

  

 

3、計算當前前月初日期和月末日期

月初

簡單:

SELECT  CONVERT(VARCHAR(7),GETDATE(),120)+'-01'

  

月末日期

這個也簡單簡單:就是月第一天加一月再減去一天

SELECT   DATEADD(DAY,-1, DATEADD(MONTH,1, CONVERT(VARCHAR(7),GETDATE(),120)+'-01'))

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 由於IOS系統存儲的數據都是在sandBox裡面,一旦刪除App,sandBox也不復存在。好在有一個例外,那就是keychain(鑰匙串)。 通常情況下,IOS系統用NSUserDefaults存儲數據信息,但是對於一些私密信息,比如密碼、證書等等,就需要使用更為安全的keychain了。 key ...
  • iOS OpenGL ES CAEAGLLayer 創建Framebuffer和Renderbuffer ...
  • 這段時間項目要求做一個類似的鬧鐘提醒功能,對通知不太熟悉的我,決定先用到xcode自帶的本地通知試試,最終成功的實現了功能,特整理分享下。 它的表現特點: app關閉的時候也能接收和顯示通知。 app處於後臺的時候能接收通知也能顯示。 app處於前臺的時候能接收,但不能顯示,但是會走應用程式dele ...
  • 今天剛從GitHub上找了一個不錯的項目,想要把它導入自己的項目中,過程中也遇到了一些小問題,總結一下,以便複習回顧!!!! 1.首先將從GitHub上下載的壓縮包進行解壓,找到其中的項目文件,直接複製粘貼在自己要導入的項目的文件夾中!!!然後Build>Rebuild Project,重新構建項目 ...
  • 經過一番思想掙扎和鬥爭之後,最終還是選擇採用Xamarin來開發跨平臺移動應用,好處和優點大家可以搜索其它博文,因為家裡面窮加上談了戀愛,就不買蘋果了,開發階段在Windows上面直接搞定哈,時候不早了,廢話不多說,咱們擼起袖子開搞吧。 安裝前的準備工具 1、蘋果鏡像文件:http://pan.ba ...
  • 在開發的時候經常需要訪問網路,比如Android就有好多這方面的框架:Volley、OkHttp、Retrofit等,當你看這些框架源碼時,可能會很好奇關於http的部分,它的首部欄位是什麼意思,http是如何工作的??等等,希望這篇文章會為你解惑。 一、概念 協議是指電腦通信網路中兩台電腦之間 ...
  • 最近有一點個人的時間,嘗試一下自己翻譯一下英文的 Optimizing graphics rendering in Unity Games, 這兒附上英文鏈接: 個人英文水平有限,unity圖像學知識也是入門,希望通過這次翻譯能增進自己的圖形學知識,若有錯誤,歡迎各位大神指點,讓我也學習進步,謝謝。 ...
  • 由OpenDigg 出品的安卓開源項目周報第八期來啦。我們的安卓開源周報集合了OpenDigg一周來新收錄的優質的安卓開源項目,方便安卓開發人員便捷的找到自己需要的項目工具。chuck 攔截並維持所有HTTP請求和響應 Just-Another-Android-App 在安卓中實現的很酷的效果 Ba ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...