您好,登錄后才能下訂單哦!
本章內(nèi)容包括:
處理并存儲(chǔ)一個(gè)特定的日期和時(shí)間。DATE類型可以存儲(chǔ)世紀(jì)、4位年份、月、日、時(shí)、分和秒
使用時(shí)間戳timestamp,時(shí)間戳可以存儲(chǔ)一個(gè)特定的日期和時(shí)間。時(shí)間戳的優(yōu)點(diǎn)是可以存儲(chǔ)帶有小數(shù)位的秒,還可以存儲(chǔ)時(shí)區(qū)
使用時(shí)間間隔interval,時(shí)間間隔可以存儲(chǔ)時(shí)間的長(zhǎng)度。如1年零3個(gè)月等。
在Oracle數(shù)據(jù)庫(kù)中,默認(rèn)情況下,日期以DD-MON-YYYY格式保存到數(shù)據(jù)庫(kù)中,其中:
DD是一個(gè)兩位的天數(shù)
MON是月份中的前三個(gè)字母,如FEB
YYYY是一個(gè)4位的年份。
默認(rèn)情況下數(shù)據(jù)庫(kù)以DD-MON-YY格式返回日期,其中YY是年份的最后兩位。
1、使用TO_DATE()和TO_CHAR()轉(zhuǎn)換時(shí)間值。
TO_CHAR(x[,format])用于將時(shí)間值x轉(zhuǎn)化為字符串,該函數(shù)提供一個(gè)可選參數(shù)format來說明x的格式。
SQL> select sysdate from dual; SYSDATE ----------- 2016/6/9 12 SQL> select to_char(sysdate,'YYYY-MM-DD HH24:MI:SS') from dual; TO_CHAR(SYSDATE,'YYYY-MM-DDHH2 ------------------------------ 2016-06-09 12:32:28 SQL> select to_char(sysdate) from dual; TO_CHAR(SYSDATE) ---------------- 09-6月 -16
TO_DATE(x[,format])用于將字符串x轉(zhuǎn)化為時(shí)間值,該函數(shù)可以指定一個(gè)可選字符串format參數(shù)來說明x的格式。如果沒有指定format參數(shù),日期就是用默認(rèn)的數(shù)據(jù)庫(kù)格式。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
設(shè)置默認(rèn)的日期格式。默認(rèn)的日期格式是在數(shù)據(jù)庫(kù)參數(shù)NLS_DATE_FORMAT中指定的。可以用下面的語(yǔ)句來修改。
SQL> alter session set nls_date_format = 'YYYY-MM-DD'; Session altered
2、使用時(shí)間值函數(shù)
時(shí)間值函數(shù)用于獲取或處理時(shí)間值和時(shí)間戳。
函數(shù) | 說明 |
ADD_MONTHS(x,y) | 返回x加上y個(gè)月后的結(jié)果,如果y是負(fù)數(shù),就從x中減去y個(gè)月 |
LAST_DAY(x) | 返回包含x的月的最后一天 |
MONTHS_BETWEEN(x,y) | 返回x和y之間有幾個(gè)月。如果x>y返回正數(shù),否則返回負(fù)數(shù)。 |
NEXT_DAY(x,day) | 返回從x開始,到下個(gè)day的時(shí)間值;day是一個(gè)文本字符串 |
ROUND(x[,unit]) | 對(duì)x取整。 |
SYSDATE | 返回?cái)?shù)據(jù)庫(kù)服務(wù)器所在的操作系統(tǒng)中設(shè)置的當(dāng)前時(shí)間值 |
TRUNC(x[,unit]) | 對(duì)x進(jìn)行截?cái)唷DJ(rèn)情況下,x被截?cái)酁楫?dāng)天的開始時(shí)間。 |
SQL> select sysdate from dual; SYSDATE ----------- 2016/6/9 12 SQL> select add_months(sysdate,1) from dual; ADD_MONTHS(SYSDATE,1) --------------------- 2016/7/9 12:52:03 SQL> select add_months(sysdate,-1) from dual; ADD_MONTHS(SYSDATE,-1) ---------------------- 2016/5/9 12:52:15 SQL> select last_day(to_char(sysdate)) from dual; LAST_DAY(TO_CHAR(SYSDATE)) -------------------------- 2016/6/30 SQL> select months_between('09-06月-2016','08-10月-2016') from dual; select months_between('09-06月-2016','08-10月-2016') from dual ORA-01861: 文字與格式字符串不匹配 SQL> select months_between('2016-06-09','2016-10-08') from dual; MONTHS_BETWEEN('2016-06-09','2 ------------------------------ -3.96774193548387 SQL> select months_between('2016-10-09','2016-06-09') from dual; MONTHS_BETWEEN('2016-10-09','2 ------------------------------ 4
3、使用時(shí)間戳
CURRENT_TIMESTAMP、LOCALTIMESTAMP、SYSTIMESTAMP返回當(dāng)前回話的日期和時(shí)間以及時(shí)區(qū)
EXTRACT 從時(shí)間戳類型或者DATE類型中提取并返回年月日時(shí)分秒或時(shí)期
TO_TIMESTAMP(x[,format])用于將字符串x轉(zhuǎn)化為一個(gè)TIMESTAMP類型,format指定轉(zhuǎn)化類型
4、使用時(shí)間間隔INTERVAL
舉例:優(yōu)惠券有效期,打折促銷的時(shí)間
類型 | 說明 |
INTERVAL_YEAR[(years_option)] TO_MONTH | 存儲(chǔ)一個(gè)時(shí)間間隔,其單位是年和月;可以通過years_option參數(shù)來指定年的精確度,默認(rèn)精度是2,意思是可以在時(shí)間間隔中為年數(shù)存儲(chǔ)兩位數(shù)字。如果試圖向表中添加年數(shù)超過INTERVAL_YEAR TO MONTH列可以存儲(chǔ)的記錄,就會(huì)返回一個(gè)錯(cuò)誤。時(shí)間間隔既可以存儲(chǔ)正數(shù),也可以存儲(chǔ)負(fù)數(shù) |
INTERVAL_DAY[(days_option)] TO_SECOND[(seconds_precision)] | 存儲(chǔ)一個(gè)時(shí)間間隔,其單位是天和秒;可以動(dòng)過指定可選的days_precision參數(shù)來指定天的精度,該參數(shù)是一個(gè)0~9的整數(shù)。默認(rèn)值是2。 |
使用INTERVAL_YEAR TO MONTH類型
創(chuàng)建表coupons用來存儲(chǔ)優(yōu)惠券信息。duration用來記錄優(yōu)惠券有效的時(shí)間間隔。
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
要想數(shù)據(jù)庫(kù)提供一個(gè)INTERVAL YEAR TO MONTH字面值,可以使用以下語(yǔ)法:
INTERVAL '[+|-][y][-m]' [YEAR[(years_precisiion)]] [TO_MONTH]
示例:
時(shí)間間隔字面量 | 說明 |
INTERVAL '1' YEAR | |
INTERVAL '11' MONTH | 時(shí)間間隔11個(gè)月(14>12 == 1年零2個(gè)月) |
INTERVAL '1-3' YEAR TO MONTH | 時(shí)間間隔為1年零3個(gè)月 |
INTERVAL '0-5' YEAR TO MONTH | 時(shí)間間隔為0年5個(gè)月 |
INTERVAL '-1-5' YEAR TO MONTH | 時(shí)間間隔為負(fù)數(shù),值為1年零5個(gè)月 |
SQL> INSERT INTO coupons(coupon_id,name,duration) 2 values(1,'$1 off Z Files',INTERVAL '1' YEAR); 1 row inserted SQL> INSERT INTO coupons(coupon_id,name,duration) 2 values(2,'$2 off Pop 3',INTERVAL '11' MONTH); 1 row inserted SQL> INSERT INTO coupons(coupon_id,name,duration) values(3,'$2 off Pop 31',INTERVAL '2' MONTH); 1 row inserted SQL> 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
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。