zjmzone
 

Oracle数据库中日期的计算方法

分类: oracle数据库 oracle数据库2005-02-17 18:03 1427人阅读 评论(0) 收藏 举报

1、TO_DATE()函数中相关的参数说明:
   Day: 
       dd 两位数字格式,最大为31 
       dy 礼拜几的英文缩写格式,例如礼拜5缩写为fri 
       day 礼拜几的英文格式,例如礼拜5就是friday 
       ddspth spelled out, ordinal twelfth 
    Month: 
       mm 两位数字格式,最大为12 
       mon 英文月份的缩写格式,例如3月march缩写为mar 
       month 英文月份的全拼形式,例如3月就是march 
    Year: 
       yy  两位数字格式,例如98表示1998年 
       yyyy 四位数字格式,例如1998表示1998年
    Hour:
       hh12 表示12小时计时
       hh24 表示24小时计时
    Minute:
       mi  表示分钟
    Second:
       ss  表示秒数
2、TO_DATE()和TO_CHAR()函数使用
select to_char( to_date(222,\'J\'),\'Jsp\') from dual
显示Two Hundred Twenty-Two 

3、求某天是星期几 
select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\') from dual; 
星期一 
select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;monday 
设置日期语言

 

ALTER SESSION SET NLS_DATE_LANGUAGE=\'AMERICAN\';

 

 

也可以这样

 

 

TO_DATE (\'2002-08-26\', \'YYYY-mm-dd\', \'NLS_DATE_LANGUAGE = American\') 
4、两个日期间的天数
select floor(sysdate - to_date(\'20020405\',\'yyyymmdd\')) from dual;
5、时间为null的用法

select id, active_date from table1

 

 

UNION

 

 

select 1, TO_DATE(null) from dual;

 

 

 

 

 

注意要用TO_DATE(null)

 

 

6、a_date between to_date(\'20011201\',\'yyyymmdd\') and to_date(\'20011231\',\'yyyymmdd\')

 

 

那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。

 

 

所以,当时间需要精确的时候,觉得to_char还是必要的

 

 

7、日期格式冲突问题

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select id, active_date from table1

 

 

UNION

 

 

select 1, TO_DATE(null) from dual;

 

 

 

 

 

注意要用TO_DATE(null)

 

 

6、a_date between to_date(\'20011201\',\'yyyymmdd\') and to_date(\'20011231\',\'yyyymmdd\')

 

 

那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。

 

 

所以,当时间需要精确的时候,觉得to_char还是必要的

 

 

7、日期格式冲突问题

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

 

 

ALTER SESSION SET NLS_DATE_LANGUAGE=\'AMERICAN\';

 

 

也可以这样

 

 

TO_DATE (\'2002-08-26\', \'YYYY-mm-dd\', \'NLS_DATE_LANGUAGE = American\') 
4、两个日期间的天数
select floor(sysdate - to_date(\'20020405\',\'yyyymmdd\')) from dual;
5、时间为null的用法

select id, active_date from table1

 

 

UNION

 

 

select 1, TO_DATE(null) from dual;

 

 

 

 

 

注意要用TO_DATE(null)

 

 

6、a_date between to_date(\'20011201\',\'yyyymmdd\') and to_date(\'20011231\',\'yyyymmdd\')

 

 

那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。

 

 

所以,当时间需要精确的时候,觉得to_char还是必要的

 

 

7、日期格式冲突问题

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select id, active_date from table1

 

 

UNION

 

 

select 1, TO_DATE(null) from dual;

 

 

 

 

 

注意要用TO_DATE(null)

 

 

6、a_date between to_date(\'20011201\',\'yyyymmdd\') and to_date(\'20011231\',\'yyyymmdd\')

 

 

那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。

 

 

所以,当时间需要精确的时候,觉得to_char还是必要的

 

 

7、日期格式冲突问题

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: \'01-Jan-01\'

 

 

alter system set NLS_DATE_LANGUAGE = American

 

 

alter session set NLS_DATE_LANGUAGE = American

 

 

或者在to_date中写

 

 

select to_char(to_date(\'2002-08-26\',\'yyyy-mm-dd\'),\'day\',\'NLS_DATE_LANGUAGE = American\') from dual;

 

 

注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,

 

 

可查看

 

 

select * from nls_session_parameters

 

 

select * from V$NLS_PARAMETERS

 

 

8、

select count(*)

 

 

from ( select rownum-1 rnum

 

 

from all_objects

 

 

where rownum <= to_date(\'2002-02-28\',\'yyyy-mm-dd\') - to_date(\'2002-

 

 

02-01\',\'yyyy-mm-dd\')+1

 

 

)

 

 

where to_char( to_date(\'2002-02-01\',\'yyyy-mm-dd\')+rnum-1, \'D\' )

 

 

not

 

 

in ( \'1\', \'7\' )

 

 

 

 

 

查找2002-02-28至2002-02-01间除星期一和七的天数

 

 

在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒)
9、

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

 

select months_between(to_date(\'01-31-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

1

 

 

 

 

 

select months_between(to_date(\'02-01-1999\',\'MM-DD-YYYY\'),

 

 

to_date(\'12-31-1998\',\'MM-DD-YYYY\')) "MONTHS" FROM DUAL;

 

 

 

 

 

1.03225806451613

 

 

10. Next_day的用法

 

 

Next_day(date, day)

 

 

 

 

 

Monday-Sunday, for format code DAY

 

 

Mon-Sun, for format code DY

 

 

1-7, for format code D

 

 

 

 

 

11

 

 

select to_char(sysdate,\'hh:mi:ss\') TIME from all_objects

 

 

注意:第一条记录的TIME 与最后一行是一样的

 

 

可以建立一个函数来处理这个问题

 

 

create or replace function sys_date return date is

 

 

begin

 

 

return sysdate;

 

 

end;

 

 

 

 

 

select to_char(sys_date,\'hh:mi:ss\') from all_objects;

 

 

12.

 

 

获得小时数

 

 

 

 

 

SELECT EXTRACT(HOUR FROM TIMESTAMP \'2001-02-16 2:38:40\') from offer

 

 

SQL> select sysdate ,to_char(sysdate,\'hh\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH\')

 

 

-------------------- ---------------------

 

 

2003-10-13 19:35:21 07

 

 

 

 

 

SQL> select sysdate ,to_char(sysdate,\'hh24\') from dual;

 

 

 

 

 

SYSDATE TO_CHAR(SYSDATE,\'HH24\')

 

 

-------------------- -----------------------

 

 

2003-10-13 19:35:21 19

 

 

 

 

 

获取年月日与此类似

 

 

13.

 

 

年月日的处理

 

 

select older_date,

 

 

newer_date,

 

 

years,

 

 

months,

 

 

abs(

 

 

trunc(

 

 

newer_date-

 

 

add_months( older_date,years*12+months )

 

 

)

 

 

) days

 

 

from ( select

 

 

trunc(months_between( newer_date, older_date )/12) YEARS,

 

 

mod(trunc(months_between( newer_date, older_date )),

 

 

12 ) MONTHS,

 

 

newer_date,

 

 

older_date

 

 

from ( select hiredate older_date,

 

 

add_months(hiredate,rownum)+rownum newer_date

 

 

from emp )

 

 

)

 

 

 

 

 

14.

 

 

处理月份天数不定的办法

 

 

select to_char(add_months(last_day(sysdate) +1, -2), \'yyyymmdd\'),last_day(sysdate) from dual

 

 

 

 

 

16.

 

 

找出今年的天数

 

 

select add_months(trunc(sysdate,\'year\'), 12) - trunc(sysdate,\'year\') from dual

 

 

 

 

 

闰年的处理方法

 

 

to_char( last_day( to_date(\'02\' || :year,\'mmyyyy\') ), \'dd\' )

 

 

如果是28就不是闰年

 

 

 

 

 

17.

 

 

yyyy与rrrr的区别

 

 

\'YYYY99 TO_C

 

 

------- ----

 

 

yyyy 99 0099

 

 

rrrr 99 1999

 

 

yyyy 01 0001

 

 

rrrr 01 2001

 

 

 

 

 

18.不同时区的处理

 

 

select to_char( NEW_TIME( sysdate, \'GMT\',\'EST\'), \'dd/mm/yyyy hh:mi:ss\') ,sysdate

 

 

from dual;

 

 

 

 

 

19.

 

 

5秒钟一个间隔

 

 

Select TO_DATE(FLOOR(TO_CHAR(sysdate,\'SSSSS\')/300) * 300,\'SSSSS\') ,TO_CHAR(sysdate,\'SSSSS\')

 

 

from dual

 

 

 

 

 

2002-11-1 9:55:00 35786

 

 

SSSSS表示5位秒数

 

 

 

 

 

20.

 

 

一年的第几天

 

 

select TO_CHAR(SYSDATE,\'DDD\'),sysdate from dual

 

 

310 2002-11-6 10:03:51

 

 

 

 

 

21.计算小时,分,秒,毫秒

 

 

select

 

 

Days,

 

 

A,

 

 

TRUNC(A*24) Hours,

 

 

TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,

 

 

TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,

 

 

TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds

 

 

from

 

 

(

 

 

select

 

 

trunc(sysdate) Days,

 

 

sysdate - trunc(sysdate) A

 

 

from dual

 

 

)

 

 

 

 

 

select * from tabname

 

 

order by decode(mode,\'FIFO\',1,-1)*to_char(rq,\'yyyymmddhh24miss\');

 

 

 

 

 

//

 

 

floor((date2-date1) /365) 作为年

 

 

floor((date2-date1, 365) /30) 作为月

 

 

mod(mod(date2-date1, 365), 30)作为日.

 

 

23.next_day函数

 

 

next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。

 

 

1  2  3  4  5  6  7

 

 

日 一 二 三 四 五 六

 

 

 

分类:

技术点:

相关文章:

  • 2021-11-05
  • 2021-10-07
  • 2021-11-05
  • 2021-12-15
  • 2021-10-17
  • 2021-12-03
猜你喜欢
  • 2021-10-06
  • 2021-12-28
  • 2021-11-01
  • 2021-11-21
  • 2021-11-05
  • 2021-12-13
  • 2021-11-05
相关资源
相似解决方案