文档章节

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
粉丝 122
博文 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
Oracle 数据库勒索病毒 RushQL 处理办法

Oracle 数据库勒索病毒 RushQL 处理办法 办法来自Oracle 官方: https://blogs.oracle.com/cnsupport_news/%E5%AF%B9%E6%95%B0%E6%8D%AE%E5%BA%93%E7%9A%84%E2%80%9C%E6%AF%94%E7%89%B9%E5%......

rootliu
11/21
0
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
165
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周三乱弹 —— 有一天考拉麻麻拉肚子了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @瘟神灬念 :分享周汇洋的单曲《Man Srae(曼斯拉之舞)》:美滋滋。。。。 手机党少年们想听歌,请使劲儿戳(这里) 我听了一下 赶紧关了, ...

小小编辑
13分钟前
2
0
oh-my-zsh 自定义

GitHub 地址 基于 oh-my-zsh 的自定义配置,增加了一些个人常用插件与皮肤。 采用的是 git submodule 来维护,包括 oh-my-zsh,之所以这么搞,主要是手头有多台 linux 需要维护, 每台机器、...

郁也风
今天
6
0
Docker安装踩坑:E_FAIL 0x80004005的解决

参考 菜鸟教程--Windows Docker 安装 http://www.runoob.com/docker/windows-docker-install.html 官方文档-Install Docker Toolbox on Windows https://docs.docker.com/toolbox/toolbox_in......

karma123
今天
5
0
js垃圾回收机制和引起内存泄漏的操作

JS的垃圾回收机制了解吗? Js具有自动垃圾回收机制。垃圾收集器会按照固定的时间间隔周期性的执行。 JS中最常见的垃圾回收方式是标记清除。 工作原理:是当变量进入环境时,将这个变量标记为“...

Jack088
昨天
17
0
大数据教程(10.1)倒排索引建立

前面博主介绍了sql中join功能的大数据实现,本节将继续为小伙伴们分享倒排索引的建立。 一、需求 在很多项目中,我们需要对我们的文档建立索引(如:论坛帖子);我们需要记录某个词在各个文...

em_aaron
昨天
27
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部