標籤:oracle 日期 date 時間 轉換
本章內容包括:
處理並儲存一個特定的日期和時間。DATE類型可以儲存世紀、4位年份、月、日、時、分和秒
使用時間戳timestamp,時間戳記可以儲存一個特定的日期和時間。時間戳記的優點是可以儲存帶有小數位的秒,還可以儲存時區
使用時間間隔interval,時間間隔可以儲存時間的長度。如1年零3個月等。
在Oracle資料庫中,預設情況下,日期以DD-MON-YYYY格式儲存到資料庫中,其中:
DD是一個兩位的天數
MON是月份中的前三個字母,如FEB
YYYY是一個4位的年份。
預設情況下資料庫以DD-MON-YY格式返回日期,其中YY是年份的最後兩位。
1、使用TO_DATE()和TO_CHAR()轉換時間值。
TO_CHAR(x[,format])用於將時間值x轉化為字串,該函數提供一個選擇性參數format來說明x的格式。
SQL> select sysdate from dual;SYSDATE-----------2016/6/9 12SQL> select to_char(sysdate,‘YYYY-MM-DD HH24:MI:SS‘) from dual;TO_CHAR(SYSDATE,‘YYYY-MM-DDHH2------------------------------2016-06-09 12:32:28SQL> select to_char(sysdate) from dual;TO_CHAR(SYSDATE)----------------09-6月 -16
TO_DATE(x[,format])用於將字串x轉化為時間值,該函數可以指定一個可選字串format參數來說明x的格式。如果沒有指定format參數,日期就是用預設的資料庫格式。x的格式要與format指定的格式一樣。
SQL> select to_char(to_date(‘05-6月-2016 12:38:23‘,‘DD-MON-YYYY HH24:MI:SS‘),‘HH24:MI:SS‘) as time 2 from dual;TIME--------12:38:23
設定預設的日期格式。預設的日期格式是在資料庫參數NLS_DATE_FORMAT中指定的。可以用下面的語句來修改。
SQL> alter session set nls_date_format = ‘YYYY-MM-DD‘;Session altered
2、使用時間值函數
時間值函數用於擷取或處理時間值和時間戳記。
函數
|
說明
|
ADD_MONTHS(x,y)
|
返回x加上y個月後的結果,如果y是負數,就從x中減去y個月
|
LAST_DAY(x)
|
返回包含x的月的最後一天
|
MONTHS_BETWEEN(x,y)
|
返回x和y之間有幾個月。如果x>y返回正數,否則返回負數。
|
NEXT_DAY(x,day)
|
返回從x開始,到下個day的時間值;day是一個文本字串
|
ROUND(x[,unit])
|
對x取整。
|
SYSDATE
|
返回資料庫伺服器所在的作業系統中設定的目前時間值
|
TRUNC(x[,unit])
|
對x進行截斷。預設情況下,x被截斷為當天的開始時間。
|
SQL> select sysdate from dual;SYSDATE-----------2016/6/9 12SQL> select add_months(sysdate,1) from dual;ADD_MONTHS(SYSDATE,1)---------------------2016/7/9 12:52:03SQL> select add_months(sysdate,-1) from dual;ADD_MONTHS(SYSDATE,-1)----------------------2016/5/9 12:52:15SQL> select last_day(to_char(sysdate)) from dual;LAST_DAY(TO_CHAR(SYSDATE))--------------------------2016/6/30SQL> select months_between(‘09-06月-2016‘,‘08-10月-2016‘) from dual;select months_between(‘09-06月-2016‘,‘08-10月-2016‘) from dualORA-01861: 文字與格式字串不匹配SQL> select months_between(‘2016-06-09‘,‘2016-10-08‘) from dual;MONTHS_BETWEEN(‘2016-06-09‘,‘2------------------------------ -3.96774193548387SQL> select months_between(‘2016-10-09‘,‘2016-06-09‘) from dual;MONTHS_BETWEEN(‘2016-10-09‘,‘2------------------------------ 4
3、使用時間戳
CURRENT_TIMESTAMP、LOCALTIMESTAMP、SYSTIMESTAMP返回當前回話的日期和時間以及時區
EXTRACT 從時間戳記類型或者DATE類型中提取並返回年月日時分秒或時期
TO_TIMESTAMP(x[,format])用於將字串x轉化為一個TIMESTAMP類型,format指定轉化類型
4、使用時間間隔INTERVAL
舉例:優惠券有效期間,打折促銷的時間
類型
|
說明
|
INTERVAL_YEAR[(years_option)] TO_MONTH
|
儲存一個時間間隔,其單位是年和月;可以通過years_option參數來指定年的精確度,預設精度是2,意思是可以在時間間隔中為年數儲存兩位元字。如果試圖向表中添加年數超過INTERVAL_YEAR TO MONTH列可以儲存的記錄,就會返回一個錯誤。時間間隔既可以儲存正數,也可以儲存負數
|
INTERVAL_DAY[(days_option)] TO_SECOND[(seconds_precision)]
|
儲存一個時間間隔,其單位是天和秒;可以動過指定可選的days_precision參數來指定天的精度,該參數是一個0~9的整數。預設值是2。
|
使用INTERVAL_YEAR TO MONTH類型
建立表coupons用來儲存優惠券資訊。duration用來記錄優惠券有效時間間隔。
SQL> create table coupons( 2 coupon_id integer constraint coups_pk primary key, 3 name varchar2(30) not null, 4 duration INTERVAL YEAR(3) TO MONTH 5 );Table created
要想資料庫提供一個INTERVAL YEAR TO MONTH字面值,可以使用以下文法:
INTERVAL ‘[+|-][y][-m]‘ [YEAR[(years_precisiion)]] [TO_MONTH]
樣本:
時間間隔字面量
|
說明
|
INTERVAL ‘1‘ YEAR
|
|
INTERVAL ‘11‘ MONTH
|
時間間隔11個月(14>12 == 1年零2個月)
|
INTERVAL ‘1-3‘ YEAR TO MONTH
|
時間間隔為1年零3個月
|
INTERVAL ‘0-5‘ YEAR TO MONTH
|
時間間隔為0年5個月
|
INTERVAL ‘-1-5‘ YEAR TO MONTH
|
時間間隔為負數,值為1年零5個月
|
|
|
SQL> INSERT INTO coupons(coupon_id,name,duration) 2 values(1,‘$1 off Z Files‘,INTERVAL ‘1‘ YEAR);1 row insertedSQL> INSERT INTO coupons(coupon_id,name,duration) 2 values(2,‘$2 off Pop 3‘,INTERVAL ‘11‘ MONTH);1 row insertedSQL> INSERT INTO coupons(coupon_id,name,duration) values(3,‘$2 off Pop 31‘,INTERVAL ‘2‘ MONTH);1 row insertedSQL> select * from coupons; COUPON_ID NAME DURATION--------------------------------------- ------------------------------ ------------------------------------------------------------------------------- 1 $1 off Z Files +001-00 2 $2 off Pop 3 +000-11 3 $2 off Pop 31 +000-02
本文出自 “阿酷部落格源” 部落格,請務必保留此出處http://aku28907.blog.51cto.com/5668513/1788951
Oracle 日期和時間的儲存於處理