详解oracle 日期格式(总结)


本文整理自网络,侵删。

to_date("要转换的字符串","转换的格式")   两个参数的格式必须匹配,否则会报错。

即按照第二个参数的格式解释第一个参数。

to_char(日期,"转换格式" ) 即把给定的日期按照“转换格式”转换。

转换的格式:

表示year的:y 表示年的最后一位 yy 表示年的最后2位 yyy 表示年的最后3位 yyyy 用4位数表示年

表示month的:mm 用2位数字表示月;mon 用简写形式 比如11月或者nov ;month 用全称 比如11月或者november

表示day的:dd 表示当月第几天;ddd表示当年第几天;dy 当周第几天 简写 比如星期五或者fri;day当周第几天 全写

比如星期五或者friday。

表示hour的:hh 2位数表示小时 12进制; hh24 2位数表示小时 24小时

表示minute的:mi 2位数表示分钟

表示second的:ss 2位数表示秒 60进制

表示季度的:q 一位数 表示季度 (1-4)

另外还有ww 用来表示当年第几周 w用来表示当月第几周。

24小时制下的时间范围:00:00:00-23:59:59

12小时制下的时间范围:1:00:00-12:59:59

比如:

select to_char(sysdate,'yy-mm-dd hh24:mi:ss') from dual  //显示:08-11-07 13:22:42

select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh24:mi:ss') from dual //显示:2005-12-25 13:25:59

而如果把上式写作:select to_date('2005-12-25,13:25:59','yyyy-mm-dd,hh:mi:ss') from dual,则会报错,因为小时hh是12进制,13为非法输入,不能匹配。

补充:

当前时间减去7分钟的时间

select sysdate,sysdate - interval '7' MINUTE from dual 

当前时间减去7小时的时间

select sysdate - interval '7' hour from dual 

当前时间减去7天的时间

select sysdate - interval '7' day from dual 

当前时间减去7月的时间

select sysdate,sysdate - interval '7' month from dual 

当前时间减去7年的时间

select sysdate,sysdate - interval '7' year from dual 

时间间隔乘以一个数字

select sysdate,sysdate - 8*interval '7' hour from dual

 Dual伪列

含义解释:

Dual 是 Oracle中的一个实际存在的表,任何用户均可读取,常用在没有目标表的select语句块中。

比如,我要获得系统时间,则用“select sysdate from dual” 则返回系统当前的时间:2008-11-07 9:32:49,不同系统可能返回日期的格式不一样。"select user from dual"则返回当前连接的用户。如果是"select 1+2 from dual",则返回结果:3

TO_DATE格式(以时间:2007-11-02   13:45:25为例)

Year:       

       yy two digits 两位年                显示值:07
        yyy three digits 三位年                显示值:007
        yyyy four digits 四位年                显示值:2007

Month:      

        mm    number     两位月              显示值:11
        mon    abbreviated 字符集表示          显示值:11月,若是英文版,显示nov    
        month spelled out 字符集表示          显示值:11月,若是英文版,显示november 

Day:      

        dd    number         当月第几天        显示值:02
        ddd    number         当年第几天        显示值:02
        dy    abbreviated 当周第几天简写    显示值:星期五,若是英文版,显示fri
        day    spelled out   当周第几天全写    显示值:星期五,若是英文版,显示friday       
        ddspth spelled out, ordinal twelfth 

Hour:

              hh    two digits 12小时进制            显示值:01
              hh24 two digits 24小时进制            显示值:13

Minute:

              mi    two digits 60进制                显示值:45

Second:

              ss    two digits 60进制                显示值:25

其它

              Q     digit         季度                  显示值:4
              WW    digit         当年第几周            显示值:44
              W    digit          当月第几周            显示值:1

24小时格式下时间范围为: 0:00:00 - 23:59:59....      

12小时格式下时间范围为: 1:00:00 - 12:59:59 .... 

1. 日期和字符转换函数用法(to_date,to_char)

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;  //日期转化为字符串  
select to_char(sysdate,'yyyy') as nowYear  from dual;  //获取时间的年  
select to_char(sysdate,'mm')  as nowMonth from dual;  //获取时间的月  
select to_char(sysdate,'dd')  as nowDay  from dual;  //获取时间的日  
select to_char(sysdate,'hh24') as nowHour  from dual;  //获取时间的时  
select to_char(sysdate,'mi')  as nowMinute from dual;  //获取时间的分  
select to_char(sysdate,'ss')  as nowSecond from dual;  //获取时间的秒

select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss')  from dual//

2. 

select to_char( to_date(222,'J'),'Jsp') from dual   

显示Two Hundred Twenty-Two    

3.求某天是星期几      

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;   

 星期一      

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;    

设置日期语言      

ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; 

也可以这样      

TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')  

4. 两个日期间的天数      

select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;  

5. 时间为null的用法      

select id, active_date from table1   
UNION   
select 1, TO_DATE(null) from dual; 

注意要用TO_DATE(null)    

6.月份差   

a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')   

那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。      

所以,当时间需要精确的时候,觉得to_char还是必要的 

7. 日期格式冲突问题      

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'      

alter system set NLS_DATE_LANGUAGE = American   
alter session set NLS_DATE_LANGUAGE = American  

或者在to_date中写      

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,      

阅读剩余部分

相关阅读 >>

oracle与mysql的区别及优缺点

oracle存储过程和自定义函数详解

oracle如何设置主键?

oracle怎么查询当前时间

oracle rac是什么

oracle与mysql自动增长列(id)的区别

oracle 最大连接数的问题

oracle安装出现乱码等相关问题

linux 自动备份oracle数据库详解

navicat for oracle工具连接oracle的方法步骤(图文)

更多相关阅读请进入《oracle》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...

    正在狠努力加载,请稍候...