讀書:《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...