SQL 求兩個日期值之間的工作天數

2021-07-05 22:59:09 字數 1334 閱讀 5782

讀書:《oracle查詢優化改寫》後有感。

以emp表為例,我們需要求得hiredate的最大值與最小值之間的工作天數。

首先,我們需要求出max和min的hiredate:

sql> select max(t.hiredate) as maxdate, min(t.hiredate) as mindate from emp t;

maxdate mindate

----------- -----------

1987/5/23 1980/12/17

sql>

其次,就是最關鍵的了:要將min到max之間的日期全部展示出來,這裡需要借助level,level的深度就是max到min之間的天數(加不加1,看各人,反正我是沒加):

select t1.mindate + (level - 1) as datestep

from (select max(t.hiredate) as maxdate, min(t.hiredate) as mindate

from emp t) t1

connect by level <= t1.maxdate - t1.mindate

結果:

再然後根據to_char函式,將日期型別轉換為星期,然後過濾即可:

sql> select sum(case

2 when to_char(t2.datestep, 'd') not in ('1', '7') then

3 1

4 else

5 0

6 end) as workdays

7 from (select t1.mindate + (level - 1) as datestep

8 from (select max(t.hiredate) as maxdate, min(t.hiredate) as mindate

9 from emp t) t1

10 connect by level <= t1.maxdate - t1.mindate) t2;

workdays

----------

1678

sql>

SQL計算兩個日期之間的工作天數

if exists select from dbo.sysobjects where id object id n tb holiday andobjectproperty id,n isusertable 1 drop table tb holiday go 定義節假日表 create table...

PHP 獲取兩個日期之間的月 天

獲取月 start year 2020 開始年 start month 01 開始月 end year 2021 結束年 end month 09 結束月 date arr 儲存結果的陣列 if start year end year else else if year i end year els...

計算兩個日期之間的工作日數

計算兩個日期之間的工作日數,星期6,星期天,不算工作日 dt1和dt2之間相隔多少工作日,其中dt3 dt4的時間為公休日,這裡公休日可以用以個陣列,或者從乙個xml表裡面讀取,以便扣除 要計算的起始時間 要計算的結束時間 公休起始時間 公休結束時間 intreturn private int di...