本文不再更新,可能存在内容过时的情况,实时更新请移步我的新博客: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中日期格式的转化
- 日期和字符串格式的转换(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函数以及日期处理;