Oracle查詢優(yōu)化日期運(yùn)算實(shí)例詳解
加減日、月、年
在Oracle中,date類型可以直接加減天數(shù),而加減月份要用add_months函數(shù).
select a.hiredate 雇用日期, a.hiredate + 5 加5天, a.hiredate - 5 減5天, add_months(hiredate, 5) 加5個月, add_months(hiredate, -5) 減5個月, add_months(hiredate, 5 * 12) 加5年, add_months(hiredate, -5 * 12) 減5年 from emp a where rownum <=1; 雇用日期 加5天 減5天 加5個月 減5個月 加5年 減5年 ----------- ----------- ----------- ----------- ----------- ----------- ----------- 1980-12-17 1980-12-22 1980-12-12 1981-05-17 1980-07-17 1985-12-17 1975-12-17
加減時、分、秒
上面講過,date可以直接加減天數(shù),那么1/24就是一小時,分鐘與秒的加減類同。
select a.hiredate, a.hiredate - 5 / 24 / 60 / 60 減5秒, a.hiredate + 5 / 24 / 60 / 60 加5秒, a.hiredate - 5 / 24 / 60 減5分鐘, a.hiredate + 5 / 24 / 60 加5分鐘, a.hiredate - 5 / 24 減5小時, a.hiredate + 5 / 24 加5小時 from emp a where rownum <= 1;
如果執(zhí)行時,報錯
數(shù)據(jù)庫服務(wù)器端的編碼和客戶端字符集編碼不一致。
我這邊用的數(shù)據(jù)庫西班牙語,不支持中文。
日期間隔之時、分、秒
SQL> select duration, duration * 24 間隔小時, duration * 24 * 60 間隔分鐘, duration * 24 * 60 * 60 間隔秒 from (select (max(a.hiredate) - min(a.hiredate)) as duration from emp a where a.ename in ('ALLEN', 'WARD')) x; DURATION 間隔小時 間隔分鐘 間隔秒 ---------- ---------- ---------- ---------- 2 48 2880 172800
日期間隔之日、月、年
加減月份用函數(shù) add_months, 而計算月份間隔就要用函數(shù)months_between
select max_hd - min_hd 間隔天, months_between(max_hd, min_hd) 間隔月, months_between(max_hd, min_hd) /12 間隔年 from (select min(hiredate) min_hd, max(hiredate) max_hd from emp) x; 間隔天 間隔月 間隔年 ---------- ---------- ---------- 2348 77.1935483 6.43279569
計算一年中周內(nèi)各日期的次數(shù)
問題
計算一年中周內(nèi)各日期(星期日、星期一 ……星期六)的次數(shù)。
解決方案
要計算一年中周內(nèi)各日期分別有多少個,必須:
- 生成一年內(nèi)的所有日期。
- 設(shè)置日期格式,得到每個日期對應(yīng)為星期幾。
- 計數(shù)周內(nèi)各日期分別有多少個。
with x as (select level lvl from dual connect by level <= (add_months(trunc(sysdate, 'y'), 12) - trunc(sysdate, 'y'))) select to_char(trunc(sysdate, 'y') + lvl - 1, 'DAY'), count(*) from x group by to_char(trunc(sysdate, 'y') + lvl - 1, 'DAY');
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- oracle 查詢當(dāng)天數(shù)據(jù)的sql條件寫法
- oracle使用to_date查詢一周的第一天日期
- Oracle查詢最近幾天每小時歸檔日志產(chǎn)生數(shù)量的腳本寫法
- oracle實(shí)現(xiàn)按天,周,月,季度,年查詢排序方法
- Oracle 獲取上周一到周末日期的查詢sql語句
- Oracle中查詢本月星期5的所有日期列表的語句
- oracle查詢截至到當(dāng)前日期月份所在年份的所有月份
- Oracle實(shí)現(xiàn)查詢2個日期所跨過的月份列表/日期列表的方法分析
- oracle實(shí)現(xiàn)動態(tài)查詢前一天早八點(diǎn)到當(dāng)天早八點(diǎn)的數(shù)據(jù)功能示例
相關(guān)文章
Oracle連接出現(xiàn)ora-12154無法解析指定的連接標(biāo)識符
這篇文章主要介紹了Oracle連接出現(xiàn)ora-12154無法解析指定的連接標(biāo)識符,需要的朋友可以參考下2017-03-03windows系統(tǒng)下進(jìn)入oracle數(shù)據(jù)庫兩種方法
這篇文章主要給大家介紹了關(guān)于windows系統(tǒng)下進(jìn)入oracle數(shù)據(jù)庫兩種方法的相關(guān)資料,Oracle數(shù)據(jù)庫是一款非常流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它被廣泛用于企業(yè)級應(yīng)用中,為了使用Oracle數(shù)據(jù)庫,我們需要先進(jìn)入數(shù)據(jù)庫系統(tǒng)中,需要的朋友可以參考下2023-09-09Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析
這篇文章主要介紹了Oracle CBO優(yōu)化模式中的5種索引訪問方法淺析,包含索引唯一掃描、索引范圍掃描、索引全掃描、索引跳躍掃描、索引快速全掃描等內(nèi)容,需要的朋友可以參考下2014-07-07