Oracle中的TO_DATE和TO_CHAR函数以及日期处理

时间:2021-10-23 04:38:18

本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:Oracle中的TO_DATE和TO_CHAR函数以及日期处理

oracle 中 TO_DATE 函数的时间格式,以 2008-09-10 23:45:56 为例。

Oracle中日期的格式

Year(年):

格式 说明 显示值 备注
yy two digits(两位年) 08
yyy three digits(三位年) 008
yyyy four digits(四位年) 2008

Month(月):

格式 说明 显示值 备注
mm number(两位月) 09
mon abbreviated(字符集表示) 9月 若是英文版,则显示sep
month spelled out(字符集表示) 9月 若是英文版, 则显示 september

Day(日):

格式 说明 显示值 备注
dd number(当月第几天) 10
ddd number(当年第几天) 254
dy abbreviated(当周第几天简写) 星期三 若是英文版, 则显示 wed
day spelled out(当周第几天全写) 星期三 若是英文版, 则显示 wednesday
ddspth spelled out thirteenth 格式后缀 SP:相应日期部分的英文拼写 TH:相应日期部分日的序号,即在表示日的数字后加”th”

Hour(时):

格式 说明 显示值 备注
hh two digits(12小时进制) 11
hh24 two digits(24小时进制) 23

Minute(分):

格式 说明 显示值 备注
mi two digits(60进制) 45

Second(秒):

格式 说明 显示值 备注
ss two digits(60进制) 56

其他:

格式 说明 显示值 备注
Q digit(季度) 3
WW digit(当年第几周) 37
W digit(当月第几周) 2

说明:

12小时格式下时间范围为: 1:00:00 – 12:59:59(12 小时制下的 12:59:59 对应 24 小时制下的 00:59:59) ;24小时格式下时间范围为: 0:00:00 – 23:59:59

Oracle中日期格式的转化

  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('2015-12-13','yyyy-mm-dd'),'day') from dual;
--输出
星期三
--查询
select to_char(to_date('2015-12-13','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;
--输出
sunday

设置日期语言的方式:

ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';

也可以这样:

select to_date('2015-12-13','yyyy-mm-dd','NLS_DATE_LANGUAGE = American') from dual;

3.计算两个日期之间的天数

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

因此,你也可以计算两个日期之间毫秒数或当前日期的毫秒数

--计算两个日期之间的毫秒数
select (sysdate - to_date('1970-01-01','yyyy-mm-dd'))* 86400000  from dual;

注:上面的计算需要根据时区进行调整,差别为8/24天,也就是8小时。

4.不同时区的处理

select new_time(date,timezone1,timezone2) from dual;

函数说明:

  • 根据date在timezone1时区的时间,返回对应的在timezone2时区对应的时间;

参数说明:

  • date:日期时间型表达式;
  • timezone1:旧时区;
  • timezone2: 新时区;

时区参数:

大西洋标准时间:        AST或ADT   
阿拉斯加_夏威夷时间: HST或HDT   
英国夏令时:          BST或BDT   
美国山区时间:     MST或MDT   
美国*时区:     CST或CDT   
新大陆标准时间:        NST   
美国东部时间:     EST或EDT   
太平洋标准时间:        PST或PDT   
格林威治标准时间:   GMT   
Yukou标准时间:      YST或YDT 

5.月份加减

--add_months(date,n):返回date加上n个月后的新日期
select sysdate ,add_months(sysdate,3)  from dual;

6.获取指定日期所属季度

select to_char(to_date('2019-12-26','yyyy-mm-dd'),'Q') from dual;

本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客:Oracle中的TO_DATE和TO_CHAR函数以及日期处理