首页 > 数据库 > Oracle > oracle中时间函数的总结
Oracle从8i开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、截取等功能。
下面是Oracle提供的日期函数一览表
|
Function |
Use |
|
ADD_MONTHS |
Adds months to a date |
|
LAST_DAY |
Computes the last day of the month |
|
MONTHS_BETWEEN |
Determines the number of months between two dates |
|
NEW_TIME |
Translates a time to a new time zone |
|
NEXT_DAY |
Returns the date of the next specified weekday |
|
ROUND |
Rounds a date/time value to a specified element |
|
SYSDATE |
Returns the current date and time |
|
TO_CHAR |
Converts dates to strings |
|
TO_DATE |
Converts strings and numbers to dates |
|
TRUNC |
Truncates a date/time value to a specific element |
--对时间的转换
select to_date('2006-06-26 01:00:00', 'yyyy-mm-dd hh:mi:ss') from dual
--系统时间
select sysdate from dual
to_char:是时间类型的转换成字符串类型的
to_date:是字符串类型的转换成时间类型的
以下的所有系统时间都可以用转换后的时间进行更换
--加小时(加了30分钟)(30/24/60)一天有24个小时,小时有60分钟。那么30分钟等于多少天呢
--也可以加一天,一天是1440分钟
select to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') old_date,
to_char(sysdate+(30/24/60), 'yyyy-mm-dd hh:mi:ss') new_date
from dual
--查找下周三的日期(查第一个出现的要查的星期)
next_day(date, string)。其中第一个参数date告诉Oracle从什么时候开始算起,第二个参数string则告诉Oracle要取的工作日。
这里的‘星期五’是跟着在安装时自动检测语言环境,来配置的,所以这里用英文的Friday
select next_day(to_date(' 2013-06-26', 'yyyy-mm-dd'),'星期五') "下周三" from dual
如果你担心运行的语言环境不同可能会带来的SQL语句会出错,可以用数字的形式来表示工作日。但是要记得一点:1表示的是周日,2表示的是周一,3表示的是周二,依此类推。
select next_day(to_date('2013-06-26', 'yyyy-mm-dd'),6) from dual
注意:这里查的‘下一个星期几’是第一次出现的星期几
--求两个日期的天数
--floor是‘地板的意思’,向下取整数.celi(天花板),向上取整数
select floor(10.9) from dual
select ceil(10.9) from dual
select floor(sysdate-to_date('2013-06-21', 'yyyy-mm-dd')) from dual
--add_months:在原有的日期加月份.
select add_months('1-6月-2013',1) from dual
--add_months:在原有的日期减月份.
select add_months('1-6月-2013',-1) from dual
--求每月的最后一天
select last_day(add_months(sysdate,2)) last_day from dual
select last_day(sysdate) last_day from dual
--求每月的第一天(如果是求的当月的一号,月份要减一,因为你算的是这个月的最后一天在加一,相当于是下个月的一号,那你求的是这个月的一号,就要减一)
select last_day(sysdate)+1 fisrt_day
select last_day(to_date('2006-06-26', 'yyyy-mm-dd'))+1 fisrt_day
--momths_between:返回两个日期之间月份的差值
--第一个参数是结束的日期,第二个参数是开始的日期,结果可能会有负数的
select months_between('1-7月-2013','1-5月-2013') from dual
注意:如果不是正月的算,就会出现小数,整数部分是整月数
--加年数
select add_months(sysdate, 2*12) two_years_later from dual
--求两个日期相差多少年
select months_between(sysdate,to_date('2006-06-26', 'yyyy-mm-dd')) / 12 years_between
from dual
以下是用时间间隔做的时间处理
--当前时间减去7个小时
select sysdate - interval '7' hour from dual
--当前时间减去7个天
select sysdate + interval '4' day from dual
--当前时间减去7个月
select sysdate,sysdate - interval '7' month from dual
--当添加的月份与给出的月份相同时会出错
--上述会出错,提示ora-01839:指定月份的日期无效
select to_date('2013-01-29', 'yyyy-mm-dd') + interval '1' month from dual;
--不会错
select add_months(to_date('2013-01-29', 'yyyy-mm-dd') ,1)
--当前时间减去7个年
select sysdate,sysdate - interval '7' year
--时间间隔乘以一个数字
select sysdate,sysdate - 8 *interval '2' hour
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23899106/viewspace-1117652/ ,如需转载,请注明出处,否则将追究法律责任。