文档章节

Oracle 日期和时间的存储于处理

kukudeku
 kukudeku
发布于 2016/06/18 09:16
字数 1320
阅读 19
收藏 0

本章内容包括:

  • 处理并存储一个特定的日期和时间。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

© 著作权归作者所有

共有 人打赏支持
kukudeku
粉丝 121
博文 48
码字总数 119925
作品 0
杭州
程序员
Oracle中的日期类型及常用函数

oracle 数据类型详解---日期型(转载) oracle 数据类型详解---日期型 oracle数据类型看起来非常简单,但用起来会发现有许多知识点,本文是我对ORACLE日期数据类型的一些整理,都是开发入门资...

猴亮屏
2014/06/03
0
0
mysql与oracle区别

编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型; MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样...

architect刘源源
03/08
1
0
Hibernate hbm文件下property标签属性之type

java.lang.String 或 hibernate string <property name="description" type="java.lang.String"></property> 或 <property name="description" type="string"></property> 建表时: mysql-->d......

最王座
2016/05/06
292
0
使用 ADO.NET 和 Oracle 进行高级数据访问

使用 ADO.NET 和 Oracle 进行高级数据访问 [转自MSDN] 发布日期: 11/4/2004 | 更新日期: 11/4/2004 Bill Hamilton 适用范围: Microsoft ADO.NET 1.1 Oracle 数据类型 摘要:学习如何使用 ...

晨曦之光
2012/04/12
160
0
MySQL与Oracle 差异比较之一数据类型

编号 ORACLE MYSQL 注释 1 NUMBER int / DECIMAL DECIMAL就是NUMBER(10,2)这样的结构INT就是是NUMBER(10),表示整型; MYSQL有很多类int型,tinyint mediumint bigint等,不同的int宽度不一样...

竹竿先生
2016/10/18
11
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部