溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle 日期和時(shí)間的存儲(chǔ)于處理

發(fā)布時(shí)間:2020-06-16 00:13:00 來源:網(wǎng)絡(luò) 閱讀:1851 作者:kuchensheng 欄目:數(shù)據(jù)庫(kù)

本章內(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)唷DJ(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

   

    


向AI問一下細(xì)節(jié)

免責(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)容。

AI