職場上所需要管理的資料量是相當龐大而複雜的,但是只要夠熟悉SQL,將資料庫中的資料搭配時間維度,以及VBA、RPA等自動化流程的工具,產生Daily Report,便可以節省大量整理資料的時間。以下是Oracle常用的時間和日期函數
。
1. 取得現在時間SYSDATE
:現在時間CURRENT_DATE
:現在時間,與SYSDATE
差別在會考量資料庫時區SYSTIMESTAMP
:回傳時區現在時間戳記,提供更精確(含毫秒)的時間資訊CURRENT_TIMESTAMP
:回傳時區現在時間戳記,與SYSTIMESTAMP
差別在會考量資料庫時區DBTIMEZONE
:資料庫時區SESSIONTIMEZONE
:會話時區
SELECT SYSDATE, SYSTIMESTAMP
FROM dual;
-- output
24-AUG-24
24-AUG-24 03.55.11.402857 PM +00:00
2. 日期與字串格式轉換,可將日期/時間格式化成特定的格式TO_DATE
:將字串
轉為日期
的資料型別
SELECT TO_DATE('2024-08-21', 'YYYY-MM-DD') FROM dual;
> 21-AUG-24
TO_CHAR
:將日期/時間
轉為字串
,可指定輸出方式
-- 以「年-月-日 時:分:秒」格式顯示
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM dual;
> 2024-08-24 18:13:15
-- 以「星期幾,月 日,年 時:分:秒」格式顯示
SELECT TO_CHAR(SYSDATE, 'Day, Month DD, YYYY HH24:MI:SS') AS formatted_date FROM dual;
> Saturday , August 24, 2024 18:13:15
TO_TIMESTAMP
:將字串
轉為時間戳
格式。
SELECT TO_TIMESTAMP('2024-08-21 15:30:00', 'YYYY-MM-DD HH24:MI:SS') FROM dual;
> 21-AUG-24 03.30.00.000000000 PM
3. 日期的計算INTERVAL
:表示時間間隔,可用於加減日期時間。
-- 加 10 天
SELECT SYSDATE + 10 FROM dual;
-- 回扣 5 小時 20 分鐘
SELECT SYSDATE - 5/24 - 20/1440
FROM dual;
-- 計算兩個日期之間的天數
SELECT (TO_DATE('2024-08-21', 'YYYY-MM-DD') - TO_DATE('2024-08-01', 'YYYY-MM-DD')) AS days_diff FROM dual;
> 20
-- 加 2 小時
SELECT SYSTIMESTAMP + INTERVAL '2' HOUR FROM dual;
> 24-AUG-24 08.16.36.928612000 PM +00:00
-- 減 30 分鐘
SELECT SYSTIMESTAMP - INTERVAL '30' MINUTE FROM dual;
> 24-AUG-24 05.46.36.937557000 PM +00:00
4. 日期和時間的提取EXTRACT
:從日期中提取特定的部分,如年份、月份、日期等。
SELECT EXTRACT(YEAR FROM SYSDATE) AS year,
EXTRACT(MONTH FROM SYSDATE) AS month,
EXTRACT(DAY FROM SYSDATE) AS day
FROM dual;
> Output:
YEAR MONTH DAY
2024 8 24
5. 時間判斷式:可過>
, <
, =
或者between
等運算子進行時間條件的判斷,放於select or where子句中
SELECT CASE
WHEN TO_DATE('2024-08-21', 'YYYY-MM-DD') > SYSDATE THEN 'Y'
WHEN SYSDATE BETWEEN TO_DATE('2024-01-01', 'YYYY-MM-DD') AND TO_DATE('2024-12-31', 'YYYY-MM-DD') THEN 'Y'
ELSE 'N'
END AS is2024
FROM dual;
> Y