最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

工作日計算問題思路和實現

來源:懂視網 責編:小采 時間:2020-11-09 14:39:12
文檔

工作日計算問題思路和實現

工作日計算問題思路和實現:項目中目前已有一周表存儲了一年中所有的假日,給定查詢起始日期和結束日期,推導出查詢時間段內工作日是多少。為了簡化這個問題,需要下面幾個假設。 1. 不考慮周六周日,將其視作普通工作日 2. 假日沒有交疊情況,不會出現10月1日到7日是國慶節(jié),其中又有
推薦度:
導讀工作日計算問題思路和實現:項目中目前已有一周表存儲了一年中所有的假日,給定查詢起始日期和結束日期,推導出查詢時間段內工作日是多少。為了簡化這個問題,需要下面幾個假設。 1. 不考慮周六周日,將其視作普通工作日 2. 假日沒有交疊情況,不會出現10月1日到7日是國慶節(jié),其中又有

項目中目前已有一周表存儲了一年中所有的假日,給定查詢起始日期和結束日期,推導出查詢時間段內工作日是多少。為了簡化這個問題,需要下面幾個假設。 1. 不考慮周六周日,將其視作普通工作日 2. 假日沒有交疊情況,不會出現10月1日到7日是國慶節(jié),其中又有

項目中目前已有一周表存儲了一年中所有的假日,給定查詢起始日期和結束日期,推導出查詢時間段內工作日是多少。為了簡化這個問題,需要下面幾個假設。

1. 不考慮周六周日,將其視作普通工作日

2. 假日沒有交疊情況,不會出現10月1日到7日是國慶節(jié),其中又有一個其它的節(jié)日

給出假日表的設計,某個假日都有起始時間和結束時間,這里只取月日,這樣就能表示每一年的假日。

CREATE TABLE [dbo].[holiday](
	[begin_time] [varchar](50) NULL,
	[end_time] [varchar](50) NULL
) ON [PRIMARY]

GO
插入測試數據,例如插入國慶節(jié)的假日

\

給定查詢時間段為從2014-09-30至2014-10-08,這期間的工作日

declare @query_begin datetime --查詢起始時間
declare @query_end datetime --查詢結束時間
declare @year1 int 
declare @year2 int
declare @yeartemp int
declare @total_holidays int
set @query_begin = '2014-09-01'
set @query_end = '2015-01-31'
set @year1 = YEAR(@query_begin)
set @year2 = YEAR(@query_end)

--存儲所有的含有年月日的假期
IF object_id('tempdb..#temp') is not null
 BEGIN
 drop table #temp
 END
 CREATE table #temp
 (
 begin_time date, 
 end_time date, 
 )

insert into #temp
select convert(varchar(4),@year1)+'-'+begin_time, convert(varchar(4),@year1)+'-'+end_time 
from holiday

--這里主要考慮查詢時間段跨年的情況
set @yeartemp=@year1+1
while @yeartemp<=@year2
begin
 insert into #temp
 select convert(varchar(4),@yeartemp)+'-'+begin_time, convert(varchar(4),@yeartemp)+'-'+end_time 
 from holiday
 set @yeartemp=@yeartemp+1
end

--去掉和查詢時間段沒有一點交集的假日段
delete from #temp
where end_time<@query_begin or begin_time>@query_end

select @total_holidays= SUM(DATEDIFF(dd,begin_time,end_time)+1)
from
(
 select case when begin_time<@query_begin then @query_begin else begin_time end as begin_time,
 case when end_time>@query_end then @query_end else end_time end as end_time from #temp
) t 

select DATEDIFF(DD,@query_begin,@query_end)+1-@total_holidays

drop table #temp
執(zhí)行該腳本就可以得到結果是2,符合預期。下面給出一些特殊測試用例,驗證腳本是否能正確計算工作日。

1. 查詢時間為2014-10-05至2014-10-08

結果:1

2. 查詢時間為2014-09-30至2014-10-07

結果:1

3. 增加一條假日,例如是教師節(jié),查詢時間段為2014-09-01至2014-10-08

結果:30

4. 在增加一條假日記錄,元旦,查詢時間段為2014-09-01至2015-01-31

現在holiday表的記錄為:

\

如果手動去算就是:30+31+30+31+31-7-1-1=144

實際結果:144

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

工作日計算問題思路和實現

工作日計算問題思路和實現:項目中目前已有一周表存儲了一年中所有的假日,給定查詢起始日期和結束日期,推導出查詢時間段內工作日是多少。為了簡化這個問題,需要下面幾個假設。 1. 不考慮周六周日,將其視作普通工作日 2. 假日沒有交疊情況,不會出現10月1日到7日是國慶節(jié),其中又有
推薦度:
標簽: 實現 計算 目前
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top