文档章节

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

kukudeku
 kukudeku
发布于 2016/06/18 09:16
字数 1320
阅读 19
收藏 0
点赞 0
评论 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
粉丝 120
博文 41
码字总数 107831
作品 0
杭州
程序员
Oracle中的日期类型及常用函数

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

微笑的江豚 ⋅ 2014/06/03 ⋅ 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 ⋅ 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 ⋅ 0

Oracle 时间类型

1、常用日期型数据类型 1.1、DATE 这是ORACLE最常用的日期类型,它可以保存日期和时间,常用日期处理都可以采用这种类型。DATE表示的日期范围可以是公元前4712年1月1日至公元9999年12月31日 ...

夏至如沫 ⋅ 2014/11/06 ⋅ 0

如何正确地处理时间

日期和时间在程序中应用广泛,每种程序开发语言都自带处理日期和时间的相关函数,很多开发者把日期和时间存入数据库中,但是,一旦涉及到跨时区的日期和时间的处理时,大多数开发者根本就不明...

Sheamus ⋅ 2015/03/04 ⋅ 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 ⋅ 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 ⋅ 0

Oracle与MySQL性能比较

oracle优点: 1、处理速度快,非常快 2、安全级别高。支持快闪以及完美的恢复,即使硬件坏了 也可以恢复到故障发前的1s 3、几台数据库做负载数据库,可以做到30s以内故障转移 4、网格控制,以...

谢思华 ⋅ 2013/11/15 ⋅ 0

程序从MYSQL迁移ORACLE注意事项之二

程序从MYSQL迁移ORACLE注意事项之二 程序从Mysql迁移到Oracle的时候,需要注意到以下几个地方: 4. 长字符串的处理 长字符串的处理ORACLE也有它特殊的地方。INSERT和UPDATE时最大可操作的字...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

oralce与mysql的区别

有些人说Oracle没有限制,实际上他们说得可能是Oracle不支持LIMIT语法.不过可以rownum虚列来实现,不过会更加麻烦.   2. Oracle不支持偏移(offset)语法. 3. Oracle的复制功能可能比MySQL更加...

wersdffg ⋅ 2015/10/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

解决httpclient超时设置不生效的问题

最近公司有项目需要通过http调用第三方服务,且第三方服务偶有超时,故需要设置一定的超时时间防止不响应的情况出现。 初始设置如下: [java] view plain copy //超时设置 RequestConfig re...

Mr_Tea伯奕 ⋅ 2分钟前 ⋅ 0

过滤器Filter和拦截器HandlerInterceptor

过滤器 依赖于servlet容器。在实现上基于函数回调,可以对几乎所有请求进行过滤,但是缺点是一个过滤器实例只能在容器初始化时调用一次。使用过滤器的目的是用来做一些过滤操作,获取我们想要...

hutaishi ⋅ 7分钟前 ⋅ 0

Redis入门详解(转)

Redis入门详解 Redis简介 Redis安装 Redis配置 Redis数据类型 Redis功能 持久化 主从复制 事务支持 发布订阅 管道 虚拟内存 Redis性能 Redis部署 Redis应用场景 Redis总结 Redis简介: Redi...

xiaoyaoyoufang ⋅ 19分钟前 ⋅ 0

说说javascript中的那些专业名词

DOM(Document Object Model) 文档对象模型 BOM(Browser Object Model) 浏览器对象模型 ECMA(European Computer Manufacturer's Association) 欧洲计算机制造商协会 W3C(World Wide Web Conso......

hang1989 ⋅ 39分钟前 ⋅ 0

Bootstrap Wizard 多步表单控件

废话 有一块需求是 有多步表单 点击下一步时触发验证一个范围内的表单,点击上一步或取消,清空表单并返回第一步,点击最后一步提交整个表单的 就找到了这个插件,本来自己写了一个原生的 fo...

无极之岚 ⋅ 54分钟前 ⋅ 0

如何利用Spring Cloud构建起自我修复型分布式系统

利用Netflix所打造的组件及各类大家熟知的工具,我们完全可以顺利应对由微服务以及分布式计算所带来的技术挑战。 在过去一年当中,微服务已经成为软件架构领域一个炙手可热的新名词,而且我们...

harries ⋅ 今天 ⋅ 0

临近实习前的感想

再过两星期就要开始新的一段实习了,想想去年的这个时候也在实习,心中不免思绪万千,也一直想写对2017做个总结,但一直迟迟没有下笔。 2017年的春节,我就开始准备开学后找份实习。那时候就...

无精疯 ⋅ 今天 ⋅ 0

Spring AOP(面向切面编程)

Spring AOP概念: Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后添加额外的功能。通常情况下,AOP把项目中需要在多处用到的功能,比如日志、安全和事物等集中到一个类中处理,而...

霍淇滨 ⋅ 今天 ⋅ 0

人工智能、机器学习、数据挖掘以及数据分析有什么联系?

人工智能是目前炙手可热的一个领域,所有的互联网公司以及各路大迦们纷纷表态人工智能将是下一个时代的革命性技术,可与互联网、移动互联网时代的变更相媲美;AlphaGo在围棋领域战胜人类最顶...

董黎明 ⋅ 今天 ⋅ 0

使用 vue-cli 搭建项目

vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一、 安装 node.js 首先需要安装node环境,可以直接到中...

初学者的优化 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部