Oracle日期函数:过去、现在及日期的差(二)

2014-11-24 17:07:25 · 作者: · 浏览: 1
om dual; 结果: 2013-12-22 09:37:48
to_char的时候可以在format参数中插入字符串,以双引号的方式插入:
select to_char(sysdate , 'yyyy"年"MM"月"dd"日"')  from  dual;

结果:	2013年12月22日

2、最常见的to_char错误

就是MM代表的是月份 MI代表队 是分钟 不要弄混了,由于Oracle中支持的时间很灵活,所以这块弄混了他不会提示你的。

select  to_char(sysdate ,'yyyy-MI-dd  hh:mm:ss')  from  dual

结果:	2013-45-22  09:12:15

出现这样的错误就很悲催了,好在分钟是45还能容易发现, 要是1-12之内的,要从结果发现错误也不容易。

3、to_date 不仅可以接受字符串的参数,还可以接受数值类型的参数:

select  to_date(20131222,'yyyy-MM-dd') from dual

结果:	2013/12/22

4、new_time 切换时区

new_time(date,'this','other')

三个参数:date代表的是this时区的时间,‘this’代表的是是用三个字母组成的缩写代替,代表当前时区,‘other’也是用三个字母组成的缩写代替,表示其他时区。

举例:查一下‘2014-10-01 12:00:00’这个时间在北京和夏威夷的时间分别是多少

select  to_date('2014-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),new_time(to_date('2014-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),'EST','HST')  FROM DUAL

结果:	2014/10/1 12:00:00	2014/10/1 7:00:00
应该不会常用,了解下就行了。

三、EXTRACT

EXTRACT可用来代替to_char函数来选择日期值中的某一部分(如从一个日期中选择月份和天)

SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL; 
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL; 
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL; 

结果:
2013
12
22

注意:EXTRACT抽取年月日部分和抽取时分部分是不同的,抽取时分的时候
SELECT EXTRACT(hour FROM TIMESTAMP  '2013-12-22 22:34:12') FROM DUAL; 
SELECT EXTRACT(minute FROM TIMESTAMP  '2013-12-22 22:34:12') FROM DUAL; 

结果:
22
34
而且如果将'2013-12-22 22:34:12'用to_date转换成日期格式还报错,真让我想不通

再说了这个函数的存在有毛用呢?至今没想明白,用to_char完全可以实现它的功能啊

select to_char(sysdate ,'yyyy')  from dual;
select to_char(sysdate ,'HH')  from dual

结果:2013
10
四、使用TIMESTAMP类型

DATE 在数据类型存储精确到秒的日期和时间,二TIMESTAMP数据类型存储精确到十亿分之一秒的日期。