oracle日期格式

  • 格式:pdf
  • 大小:103.73 KB
  • 文档页数:4

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;

monday

设置⽇期语⾔

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,当然还有很多,

可查看

select * from nls_session_parameters

select * from V$NLS_PARAMETERS

8.

select count(*)

from ( select rownum-1 rnum

from all_objects

where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-

02-01','yyyy-mm-dd')+1

)

where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )

not in ( '1', '7' )

查找2002-02-28⾄2002-02-01间除星期⼀和七的天数

在前后分别调⽤DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, ⽽不是毫秒).

9. 查找⽉份

select months_between(to_date('01-31-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1

select months_between(to_date('02-01-1999','MM-DD-YYYY'),to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;

1.03225806451613

10. Next_day的⽤法

Next_day(date, day)