共計 1914 個字符,預計需要花費 5 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 Oracle 查詢優化日期運算的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
加減日、月、年
在 Oracle 中,date 類型可以直接加減天數,而加減月份要用 add_months 函數.
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
雇用日期 加 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 可以直接加減天數,那么 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;
如果執行時,報錯
數據庫服務器端的編碼和客戶端字符集編碼不一致。
我這邊用的數據庫西班牙語,不支持中文。
日期間隔之時、分、秒
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
日期間隔之日、月、年
加減月份用函數 add_months,而計算月份間隔就要用函數 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
計算一年中周內各日期的次數
問題
計算一年中周內各日期(星期日、星期一 ……星期六)的次數。
解決方案
要計算一年中周內各日期分別有多少個,必須:
生成一年內的所有日期。
設置日期格式,得到每個日期對應為星期幾。
計數周內各日期分別有多少個。
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 查詢優化日期運算的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節正文完