--MONTHS_BETWEEN(date2,date1)
SQL> select months_between('19-12
MON_BETWEEN
-----------
SQL>select
months_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.dd'))
mon_betw from dual;
MON_BETW
---------
-60
Oracle
--
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd
hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd
hh24-mi-ss')) * 24 * 60 * 60 * 1000)
--
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd
hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd
hh24-mi-ss')) * 24 * 60 * 60)
--
select ceil(((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd
hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd
hh24-mi-ss'))) * 24 * 60)
--
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd
hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd
hh24-mi-ss')) * 24)
--
select ceil((To_date('2008-05-02 00:00:00' , 'yyyy-mm-dd
hh24-mi-ss') - To_date('2008-04-30 23:59:59' , 'yyyy-mm-dd
hh24-mi-ss')))
----------------------------------------
----------------------------------------
--
select (EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) -
EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd'))) * 12 +
from dual;
--------------------------------------
--------------------------------------
--
select EXTRACT(year FROM to_date('2009-05-01','yyyy-mm-dd')) -
EXTRACT(year FROM to_date('2008-04-30','yyyy-mm-dd')) years from
dual;
select
select round(sysdate)
select to_date('2008-9-2','yyyy_mm_dd') as
格式成日期 from
dual;
SELECT TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyymm') FROM DUAL;
Select last_day(sysdate) from dual;
Select to_char(sysdate,'YYYY') from dual;
select to_char(sysdate,'mm') from dual;
select to_char(sysdate,'dd') from dual;
一下是转载
1。上月末天:
SQL> select
to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay
from
dual;
LASTDAY
----------
2005-05-31
2。上月今天
SQL> select to_char(add_months(sysdate,-1),'yyyy-MM-dd')
PreToday from dual;
PRETODAY
----------
2005-05-21
3.上月首天
SQL> select
to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay
from dual;
FIRSTDAY
----------
2005-05-01
4.按照每周进行统计
SQL> select to_char(sysdate,'ww') from dual group by
to_char(sysdate,'ww');
TO
--
25
5。按照每月进行统计
SQL> select to_char(sysdate,'mm') from dual group by
to_char(sysdate,'mm');
TO
--
06
6。按照每季度进行统计
SQL> select to_char(sysdate,'q') from dual group by
to_char(sysdate,'q');
T
-
2
7。按照每年进行统计
SQL> select to_char(sysdate,'yyyy') from dual group by
to_char(sysdate,'yyyy');
TO_C
----
2005
8.要找到某月中所有周五的具体日期
select to_char(t.d,'YY-MM-DD') from (
select trunc(sysdate, 'MM')+rownum-1 as d
from dba_objects
where rownum < 32) t
where to_char(t.d, 'MM') = to_char(sysdate, 'MM')
--
and
trim(to_char(t.d, 'Day')) = '星期五'
--------
03-05-02
03-05-09
03-05-16
03-05-23
03-05-30
如果把where to_char(t.d, 'MM') = to_char(sysdate, 'MM')改成sysdate-90,即为查找当前月份的前三个月中的每周五的日期。
9.oracle中时间运算
内容如下:
1
2
3
4
SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss';
会话已更改。
SQL>
set serverout on
SQL> declare
10 end;
11 /
PL/SQL 过程已成功完成。
在Oracle中实现时间相加处理
--
名称:Add_Times
--
功能:返回d1与NewTime相加以后的结果,实现时间的相加
--
说明:对于NewTime中的日期不予考虑
--
日期:2004-12-07
--
版本:1.0
--
作者:Kevin
create or replace function Add_Times(d1 in date,NewTime in date)
return date
is
begin
end Add_Times;
--
测试用例
-- select Add_Times(sysdate,to_date('2004-12-06
03:23:00','YYYY-MM-DD HH24:MI:SS')) from dual
在Oracle9i中计算时间差
计算时间差是Oracle DATA数据类型的一个常见问题。Oracle支持日期计算,你可以创建诸如“日期1-日期2”这样的表达式来计算这两个日期之间的时间差。
round(to_number(end-date-start_date))-
round(to_number(end-date-start_date)*24)-
round(to_number(end-date-start_date)*1440)-
SQL> select sysdate-(sysdate-3) from
dual;
SYSDATE-(SYSDATE-3)
-------------------
Select
from
(SYSDATE-(SYSDATE-3.111))*1440
------------------------------
Select
from
ROUND(TO_NUMBER(SYSDATE-(SYSDATE-3.111))*1440)
----------------------------------------------
Update
set
where
and
查出任一年月所含的工作日
CREATE OR REPLACE FUNCTION Get_WorkingDays(
) RETURN INTEGER IS
BEGIN
END Get_WorkingDays;
______________________________________
还有一个版本
CREATE OR REPLACE FUNCTION Get_WorkingDays(
) RETURN INTEGER IS
BEGIN
END Get_WorkingDays;
以上两个版本的比较
第一个版本一条SQL语句就可以得出结果,不需要编程就可以达到目的。但需要使用任意一张有权访问的、记录条数至少为31的一张表或视图。
10、实现天时分秒计算
select floor(TO_NUMBER(to_date('2012-12-23 18:41:01',