補充 SYSDATE 在單一查詢中固定不變的特性、擷取時分秒元素、年月日差異計算等實用程式碼片段,可直接套用於報表、批次程式。
SELECT TO_CHAR(SYSDATE,'HH:MI:SS') FROM all_objects;
-- 所有行顯示相同時間(查詢開始瞬間)
-- 若需每行不同時間,建立函數
CREATE OR REPLACE FUNCTION sys_date RETURN DATE IS
BEGIN RETURN SYSDATE; END;
/
SELECT TO_CHAR(sys_date,'HH:MI:SS') FROM all_objects; -- 每行重新取值
SELECT SYSDATE, TO_CHAR(SYSDATE,'HH') FROM dual; -- 07 (12制)
SELECT SYSDATE, TO_CHAR(SYSDATE,'HH24') FROM dual; -- 19 (24制)
-- 年月日同理:YYYY, MM, DD
SELECT older_date, newer_date,
years, months,
ABS(TRUNC(newer_date - ADD_MONTHS(older_date, years*12 + months))) days
FROM (
SELECT TRUNC(MONTHS_BETWEEN(newer_date, older_date)/12) years,
MOD(TRUNC(MONTHS_BETWEEN(newer_date, older_date)),12) months,
newer_date, older_date
FROM (
SELECT hiredate older_date,
ADD_MONTHS(hiredate, ROWNUM) + ROWNUM newer_date
FROM emp
)
);
輸出:YEARS, MONTHS, DAYS 三欄精確差異,避免單純相減天數再除 30/365 的誤差。
TRUNC(SYSDATE, 'MM')LAST_DAY(SYSDATE)ADD_MONTHS(TRUNC(SYSDATE,'MM'),1)TRUNC(SYSDATE, 'Q')