Oracle对于时间和日期的存储和处理主要是 date 类型和 timestamp 类型,本文主要是摘要Oracle的基本的日期函数。
1. DATE 类型 和 TIMESTAMP 数据类型
DATE类型是Oracle数据库用户用得比较多的一个数据类型,它存储一个日期数据,不仅包括年、月、日,而且包括时、分、秒。SYSDATE是一个特殊列(伪列),存储当前系统目前的日期时间。
DATE数据类型的主要问题是它粒度只到秒,ORACLE已经在DATE数据类型上扩展出来了TIMESTAMP数据类型,它包括了所有DATE数据类型的年月日时分秒的信息,而且包括了小数秒的信息。和SYSDATE对应的,SYSTIMESTAMP是存储当前系统日期时间的一个时间戳类型的伪列。
DATE类型和TIMESTAMP类型的转换需要用到CAST函数,下面就对这两个类型的一些基本的函数进行摘录和备份。
2. 基本函数和功能。
2.1 TO_DATE 、 TO_TIMESTAMP 和 TO_CHAR 是我们日常用得最多的关于日期的函数,
是把字符串按照特定的格式转换成date类型、timestamp类型 ,或者把date类型转换成字符串。
格式: TO_DATE(STRING, 'format')
TO_TIMESTAMP(STRING, 'format')
TO_CHAR(DATE/TIMESTAMP, 'format')
EXAMPLES:
select to_date('2011/11/24 10:51:23', 'yyyy/mm/dd hh24:mi:ss') from dual;
select to_timestamp('2011/11/24 10:51:23123456', 'yyyy/mm/dd hh24:mi:ss:ff') from dual;
select to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss') from dual;
2.2 ADD_MONTHS
格式: ADD_MONTHS(date, count)
含义: 将 count 个月份加在 date 日期上(负则减)。
EXAMPLE:
select add_months(sysdate, 6) from dual ; -- 表示半年后的今天
2.3 LAST_DAY
格式:LAST_DAY(date)
含义:date所处月份的最后一天
EXAMPLE:
select last_day(sysdate) from dual ; -- 表示本月的最后一天(只到日期,时分秒和 sysdate 一样)
2.4 NEXT_DAY
格式: NEXT_DAY(date, 'day')
含义: 求出date之后下一个星期(day)天的日期,
其中day的含义是星期天、星期一...星期六,实际格式和数据库日期格式语言有关.
数据库日期语言是英语:day = 'SUNDAY' / 'MONDAY' / 'TUESDAY'... /'SATURDAY'
数据库日期语言是简体众位:day = '星期日' / '星期一' / '星期二'... /'星期六'
通用的,可以用数字代替:1表示星期天,2表示星期一,3表示星期二...7表示星期六。
EXAMPLE:
select t.value from v$nls_parameters t where t.PARAMETER = 'NLS_DATE_LANGUAGE' ;
-- 查看我数据库的日期语言为 SIMPLIFIED CHINESE
select next_day(sysdate, '星期五') from dual ; -- 下个星期五的日期
select next_day(sysdate, 6) from dual ; -- 下个星期五的日期
2.5 MONTHS_BETWEEN
格式: MONTHS_BETWEEN(date1, date2)
含义: 返回date1和date2两个日期之间的月份数,如果计算结果不是整数,ORACLE会把31作为分母来计算。
EXAMPLES:
select months_between(sysdate, sysdate-1) from dual ;-- 返回0.032258064516129 就是1/31。
select months_between(sysdate, add_months(sysdate,1) from dual ; -- 返回 1
2.6 EXTRACT
格式: EXTRACT(timeunit FROM datetime)
含义: 从日期值中提取部分日期,如从一个日期提取月份值。
EXTRACT (
{ YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }
| { TIMEZONE_HOUR | TIMEZONE_MINUTE }
| { TIMEZONE_REGION | TIMEZONE_ABBR }
FROM { date_value | interval_value } )
注意:1. You can only extract YEAR, MONTH, and DAY from a DATE.
2. You can only extract TIMEZONE_HOUR and TIMEZONE_MINUTE from a timestamp with a time zone datatype.
EXAMPLES:
select extract(YEAR FROM SYSDATE) from dual ; -- 返回 2011
select extract(MONTH FROM SYSDATE) from dual ; -- 返回 11
更多可以参考:http://blog.csdn.net/bobo12082119/article/details/6427847
2.7 ROUND/TRUNC
ROUND(date [, format ] ) 四舍五入,format默认为天。
TRUNC(date [, format ] ) 取精度,不作四舍五入,直接去掉尾数。 format 默认截取到天。
2.8 GREATEST / LEAST
GREATEST / LEAST 函数也可以用于日期列表,返回的是 最近/最早 的日期。
2.9 时区相关函数不作整理,用得地方不多。
分享到:
相关推荐
关于Oracle日期函数的练习,代码清晰简洁,适于初学者参考!
oracle经常用到的日期函数,很有用的
oracle日期函数全面总结,平时遇到 的很多对日期的处理问题都归档在里面了,希望对大家有所帮助!
oracle日期函数字符函数聚合函数
Oracle日期函数大全 常用日期数据格式
Oracle日期函数大全[文].pdf
Oracle日期函数
Oracle日期函数集锦,常见日期函数的使用,及具体的使用实例
2021-2022收藏的精品资料
Oracle日期函数大礼包初学者必学的知识。时间为null的用法 select id, active_date from table1 UNION select 1, TO_DATE(null) from dual;
ORACLE日期函数01课程.pdf
学习ORACLE日期函数一分析.pdf
涉及Oracle常用日期函数的用法、解析以及相关实例
平常想找些日期函数总是很费劲,这个文档比较全,可以做为工具使用。
ORACLE日期函数01(1)[参考].pdf
oracle自定义日期函数、你值得拥有!
oracle 中的日期函数很多,又很像,使用起来也很方便,就是容易混淆,现在有集锦一资源愿与大家分享。