Oracle 日期和时间的存储于处理
博客专区 > kukudeku 的博客 > 博客详情
Oracle 日期和时间的存储于处理
kukudeku 发表于2年前
Oracle 日期和时间的存储于处理
  • 发表于 2年前
  • 阅读 12
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

本章内容包括:

  • 处理并存储一个特定的日期和时间。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 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转化为时间值,该函数可以指定一个可选字符串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 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、使用时间戳

    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 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

   

    


本文出自 “阿酷博客源” 博客,请务必保留此出处http://aku28907.blog.51cto.com/5668513/1788951

标签: Oracle 日期 Date
共有 人打赏支持
粉丝 118
博文 37
码字总数 94902
×
kukudeku
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: