Oracle中日期時間的處理有時候是非常讓人頭疼的一件事。下面呢,我將我總結的一些日期時間函數的用法寫下來,以作化輸出為輸入之用。
先來了解些基本概念:
日期時間函數:用于處理DATE和TIMESTAMP類型的數據,除了函數MONRHS_BETWEEN返回數字值外,其他日期函數均返回DATE類型的數據。
數字格式:Oracle是以7位數字格式來存放日期數據的,包括世紀、年、月、日、小時、分鐘、秒,并且默認日期顯示格式為“DD-MON-YY”。下面主要對日期時間函數做以總結(說明:以下示例都在sqlplus中書寫,并測試通過的):1、ADD_MONTHS(d,n) 返回d之后或之前的n個月所對應的日期時間(n為正整數表示之后,n為負整數表示之前)。示例如下:SQL>DECLARE v_date DATE; BEGIN v_date:=add_months(sysdate,-14); dbms_output.put_line('當前日期前14個月對應的日期:'||v_date); END;當前日期前14個月對應的日期:27-10月-022、CURRENT_DATE 返回當前會話時區對應的日期時間,示例如下:SQL>ALTER session SET TIME_ZONE='-5:0';SQL>ALTER SESSION SET nls_date_format='YYYY-MM-DD HH24:MI';SQL>SELECT current_date FROM dual;結果為:CURRENT_DATE--------------------------2003-12-27 06:443、CURRENT_TIMESTAMP 用于返回當前會話時區的日期時間。示例如下:SQL>SELECT current_timestamp FROM dual;CURRENT_TIMESTAMP---------------------------------27-12月-03 07.45.22.146000 下午 +08:004、DBTIMEZONE 用于返回數據庫所在時區,示例如下:SQL>DECLARE v_zone VARCHAR2(10); BEGIN v_zone:=dbtimezone; dbms_output.put_line('當前數據庫時區:'||v_zone); END;結果:當前數據庫時區:+08:005、EXTRACT 用于從日期時間值中取得所需要的特定數據(例如取得年份、月份等)SQL>SELECT extract(YEAR FROM sysdate) year FROM dual;YEAR------------20176、FROM_TZ 用于將特定時區的TIMESTAMP值轉變為TIMESTAMP WITH TIME ZONE值,示例如下:SQL>DECLARE v_tzv VARCHAR2(100); BEGIN v_tzv:=from_tz(TIMESTAMP '2003-03-28 08:00:00','3:00'); dbms_output.put_line(v_tzv); END;28-3月 -03 08.00.00.000000000 上午 +03:007、LAST_DAY(d) 用于返回特定日期所在月份的最后一天。示例如下:SQL>SELECT last_day(sysdate) FROM dual;LAST_DAY(sysdate)----------------------------31-12月-038、LOCALTIMESTAMP 用于返回當前會話時區的日期時間。SQL>DECLARE v_ts VARCHAR2(100); BEGIN v_ts:=localtimestamp; dbms_output.put_line('當前日期時間:'||v_ts); END;當前日期時間:27-12月-03 08.25.08.607000000 下午9、MONTHS_BETWEEN(d1,d2) 用于返回日期d1和d2之間相差的月數。如果d1小于d2,則返回負數。如果日期d1和d2的天數相同或都是月底,則返回整數;否則Oracle以每月31天為準來計算結果的小數部分。SQL> SELECT months_between(sysdate,'31-8月 -1998') FROM dual;MONTHS_BETWEEN(SYSDATE,'31-8 月-1998')-------------------------------------------------------------------63.89842910、NEW_TIME(date,zone1,zone2) 用于返回時區一的日期時間所對應的時區二的日期時間。SQL>DECLARE v_time DATE; BEGIN dbms_session.set_nls('nls_date_format','YYYY-MM-DD HH24:MI:SS'); v_time:=new_time(to_date('2003-11-10 12:10:00','YYYY-MM-DD HH24:MI:SS'),'BST','EST'); dbms_output.put_line('當前日期時間:'||v_time); END;當前日期時間:2003-11-10 18:10:0011、NEXT_DAY(d,char) 該函數用于返回指定日期后的第一個工作日(由char指定)所對應的日期。示例如下:SQL>SELECT next_day(sysdate,'星期一') AS nextday FROM dual;nextday-----------29-12月 -0312、ROUND(d[.fmt]) 用于返回日期時間的四舍五入結果。如果fmt指定年度,則7月1日為分界線;如果fmt指定月,則16日為分界線;如果指定天,則中午12:00時為分界線SQL>DECLARE v_date DATE; BEGIN v_date:=ROUND(SYSDATE,'MONTH'); dbms_output.put_line(SYSDATE||'四舍五入結果:'||v_date); END;28-12月-03 四舍五入結果:01-1月 -0413、SESSIONTIMEZONE 返回當前會話所在時區SQL>SELECT sessiontimezone FROM dual;SESSIONTIMEZONE---------------------------------+08:0014、SYSDATE 用于返回當前系統的日期時間SQL>SELECT sysdate FROM dual;SYSDATE ----------------28-12月 -0315、SYSTIMESTAMP 用于返回當前系統的日期時間及時區。示例如下SQL>DECLARE v_timestamp VARCHAR2(100); BEGIN v_timestamp:=SYSTIMESTAMP; dbms_output.put_line('當前系統時間及時區:'||v_timestamp); END;當前系統時間及時區:28-12月-03 07.46.47.745000000 上午 +08:00注意:以上為一些常用的日期時間函數。:
新聞熱點
疑難解答