1、查詢指定時(shí)間區(qū)間的工作日
這個(gè)主要難點(diǎn)是法定節(jié)假日,國(guó)家的法定節(jié)假日每年都不一樣,還涉及到調(diào)休,所以我們?cè)O(shè)計(jì)一個(gè)假日表。主要字段有年份,類型(是否調(diào)休),假期日期。如下:
CREATE TABLE [dbo].[Holidays](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Holiday] [datetime2](7) NULL,--假期日期
[YearS] [char](4) NULL,--年份
[daytype] [int] NULL--類型
)
?
添加好當(dāng)年的假期和調(diào)休日期
寫個(gè)方法計(jì)算出除開法定假日的工作日
ALTER FUNCTION [dbo].[GetWorkerDays]
(
-- Add the parameters for the function here
@StartTime DATETIME, -- 起始時(shí)間
@EndTime DATETIME -- 結(jié)束時(shí)間,查詢默認(rèn)小于此時(shí)間
)
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
?
執(zhí)行這個(gè)表值函數(shù)后加上調(diào)休日和減去法定假日就是工作日了,大家可以再寫一個(gè)存儲(chǔ)過程。
2,計(jì)算指定日期段的休息日
這個(gè)跟那個(gè)相反,就是星期天加上法定假日在減去調(diào)休日
我們寫一個(gè)函數(shù)
ALTER FUNCTION GetRestDays
(
@StartTime DATETIME2,
@EndTime DATETIME2
)
RETURNS INT
AS
BEGIN
DECLARE @LegalRest INT --法定假期
DECLARE @AdjustmentDay INT--調(diào)休上班時(shí)間
DECLARE @SurplusDay INT --剩余工作日
DECLARE @CountDay INT --總共天數(shù)
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)) --總共天數(shù) 計(jì)算出 時(shí)間段總共天數(shù)
return @CountDay-@SurplusDay+@LegalRest-@AdjustmentDay
END
?
3、計(jì)算當(dāng)前前月初日期和月末日期
月初
簡(jiǎn)單:
SELECT CONVERT(VARCHAR(7),GETDATE(),120)+'-01'
月末日期文章來源:http://www.zghlxwxcb.cn/news/detail-424170.html
這個(gè)也簡(jiǎn)單簡(jiǎn)單:就是月第一天加一月再減去一天文章來源地址http://www.zghlxwxcb.cn/news/detail-424170.html
SELECT DATEADD(DAY,-1, DATEADD(MONTH,1, CONVERT(VARCHAR(7),GETDATE(),120)+'-01'))
到了這里,關(guān)于Sql server 查詢指定時(shí)間區(qū)間工作日數(shù)、休息日數(shù)等日期操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!