ITPub博客

首页 > 数据库 > Oracle > oracle中时间函数的总结

oracle中时间函数的总结

Oracle 作者:123udb 时间:2013-06-28 20:25:13 0 删除 编辑

Oracle8i开始就提供了大量的日期函数,这些日期函数包括对日期进行加减、转换、截取等功能。

下面是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

不可以,回报  oracle中时间函数的总结

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  from dual

select last_day(to_date('2006-06-26', 'yyyy-mm-dd'))+1 fisrt_day  from dual

 

--momths_between:返回两个日期之间月份的差值

--第一个参数是结束的日期,第二个参数是开始的日期,结果可能会有负数的

select months_between('1-7-2013','1-5-2013') from dual

注意:如果不是正月的算,就会出现小数,整数部分是整月数

      小数部分是剩余的天数除以31的来, 2月会出错,得出不出正确的天数???

 

--加年数

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)  from duals;

--当前时间减去7个年

select sysdate,sysdate - interval '7' year   from dual

--时间间隔乘以一个数字

select sysdate,sysdate - 8 *interval '2' hour   from dual

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23899106/viewspace-1117652/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2010-05-12