`

oracle 日期/时间函数

 
阅读更多

摘自他出,只为学习。

 

 

 

 Oracle关于时间/日期的操作

  1.日期时间间隔操作

  当前时间减去7分钟的时间

  

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval '7' MINUTE from dual
select sysdate,sysdate - interval '7' MINUTE from dual



  当前时间减去7小时的时间

  

Java代码 复制代码 收藏代码
  1. select sysdate - interval '7' hour from dual
select sysdate - interval '7' hour from dual



  当前时间减去7天的时间

  

Java代码 复制代码 收藏代码
  1. select sysdate - interval '7' day from dual
select sysdate - interval '7' day from dual



  当前时间减去7月的时间

  

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval '7' month from dual
select sysdate,sysdate - interval '7' month from dual



  当前时间减去7年的时间

  

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval '7' year from dual
select sysdate,sysdate - interval '7' year from dual



  时间间隔乘以一个数字

  

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - 8 *interval '2' hour from dual
select sysdate,sysdate - 8 *interval '2' hour from dual



  2.日期到字符操作

Java代码 复制代码 收藏代码
  1.   select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual
  2.   select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual
  3.   select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual
  4.   select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual
  select sysdate,to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual

  select sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual

  select sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss') from dual

  select sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss') from dual


  参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

  3. 字符到日期操作

Java代码 复制代码 收藏代码
  1.   select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
  select to_date('2003-10-17 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual



  具体用法和上面的to_char差不多。

  4. trunk/ ROUND函数的使用

Java代码 复制代码 收藏代码
  1.   select trunc(sysdate ,'YEAR') from dual
  2.   select trunc(sysdate ) from dual
  3.   select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual
  select trunc(sysdate ,'YEAR') from dual

  select trunc(sysdate ) from dual

  select to_char(trunc(sysdate ,'YYYY'),'YYYY') from dual



  5.oracle有毫秒级的数据类型

  --返回当前时间 年月日小时分秒毫秒

Java代码 复制代码 收藏代码
  1.   select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;
  select to_char(current_timestamp(5),'DD-MON-YYYY HH24:MI:SSxFF') from dual;



  --返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)

  

Java代码 复制代码 收藏代码
  1. select to_char(current_timestamp(9),'MI:SSxFF') from dual;
select to_char(current_timestamp(9),'MI:SSxFF') from dual;



  6.计算程序运行的时间(ms)

Java代码 复制代码 收藏代码
  1.   declare
  2.   type rc is ref cursor;
  3.   l_rc rc;
  4.   l_dummy all_objects.object_name%type;
  5.   l_start number default dbms_utility.get_time;
  6.   begin
  7.   for I in 1 .. 1000
  8.   loop
  9.   open l_rc for
  10.   'select object_name from all_objects '||
  11.   'where object_id = ' || i;
  12.   fetch l_rc into l_dummy;
  13.   close l_rc;
  14.   end loop;
  15.   dbms_output.put_line
  16.   ( round( (dbms_utility.get_time-l_start)/100, 2 ) ||
  17.   ' seconds...' );
  18.   end;
  declare

  type rc is ref cursor;

  l_rc rc;

  l_dummy all_objects.object_name%type;

  l_start number default dbms_utility.get_time;

  begin

  for I in 1 .. 1000

  loop

  open l_rc for

  'select object_name from all_objects '||

  'where object_id = ' || i;

  fetch l_rc into l_dummy;

  close l_rc;

  end loop;

  dbms_output.put_line

  ( round( (dbms_utility.get_time-l_start)/100, 2 ) ||

  ' seconds...' );

  end;



7、add_months()用于从一个日期值增加或减少一些月份





1〉获得若干分钟前的时间

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - N/(60*24) from dual;
select sysdate,sysdate - N/(60*24) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval 'N' minute from dual
select sysdate,sysdate - interval 'N' minute from dual



2〉获得若干分钟后的时间 s

Java代码 复制代码 收藏代码
  1. elect sysdate,sysdate + N/(60*24) from dual;
elect sysdate,sysdate + N/(60*24) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + interval 'N' minute from dual
select sysdate,sysdate + interval 'N' minute from dual



注释:"N"表示需要减去或者加上的分钟数

3〉获得若干秒前的时间 s

Java代码 复制代码 收藏代码
  1. elect sysdate,sysdate - N*0.00001 from dual;
elect sysdate,sysdate - N*0.00001 from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - N/(60*60*24) from dual;
select sysdate,sysdate - N/(60*60*24) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval 'N' second from dual
select sysdate,sysdate - interval 'N' second from dual 



4〉获得若干秒后的时间

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + N*0.00001 from dual;
select sysdate,sysdate + N*0.00001 from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - N/(60*60*24) from dual;
select sysdate,sysdate - N/(60*60*24) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + interval 'N' second from dual
select sysdate,sysdate + interval 'N' second from dual



注释:"N"表示需要减去或者加上的秒数
注释:N*0.00001 等价于 N/(60*60*24)

5〉获得若干小时前的时间

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - N*/24 from dual;
select sysdate,sysdate - N*/24 from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval 'N' hour from dual
select sysdate,sysdate - interval 'N' hour from dual



6〉获得若干小时后的时间

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + N*/24 from dual;
 select sysdate,sysdate + N*/24 from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + interval 'N' hour from dual
select sysdate,sysdate + interval 'N' hour from dual



注释:"N"表示需要减去或者加上的小时数

7〉获得若干月之后同一时间

Java代码 复制代码 收藏代码
  1. select sysdate,add_months(sysdate,N) from dual;
select sysdate,add_months(sysdate,N) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + interval 'N' month from dual
select sysdate,sysdate + interval 'N' month from dual



8〉获得若干月之前的同一时间

Java代码 复制代码 收藏代码
  1. select sysdate,add_months(sysdate,-N) from dual;
select sysdate,add_months(sysdate,-N) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval 'N' month from dual
select sysdate,sysdate - interval 'N' month from dual



注释:"N"表示需要减去或者加上的月数

9〉获得某个日期所在月份的第一天

Java代码 复制代码 收藏代码
  1. select sysdate,trunc(sysdate,'mm') from dual;
select sysdate,trunc(sysdate,'mm') from dual;



10〉获得某个日期所在年的第一天

Java代码 复制代码 收藏代码
  1. select sysdate,trunc(sysdate,'yyyy') from dual;
select sysdate,trunc(sysdate,'yyyy') from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,to_date(to_char((to_number(to_char(sysdate,'yyyy')) * 100 + 1) * 100 + 1),'yyyymmdd') from dual
select sysdate,to_date(to_char((to_number(to_char(sysdate,'yyyy')) * 100 + 1) * 100 + 1),'yyyymmdd') from dual



11〉获得某个日期所在年的最后一天

Java代码 复制代码 收藏代码
  1. select sysdate,to_date((to_char(sysdate,'yyyy') || '1231'),'yyyymmdd') from dual;
select sysdate,to_date((to_char(sysdate,'yyyy') || '1231'),'yyyymmdd') from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,to_date(to_char((to_number(to_char(sysdate,'yyyy'))* 100 + 12) * 100 + 31),'yyyymmdd') from dual
select sysdate,to_date(to_char((to_number(to_char(sysdate,'yyyy'))* 100 + 12) * 100 + 31),'yyyymmdd') from dual


12〉获得某个日期所在月份的最后一天

Java代码 复制代码 收藏代码
  1. select sysdate,last_day(sysdate) from dual;
select sysdate,last_day(sysdate) from dual;



13〉获得两个日期之间的时数

Java代码 复制代码 收藏代码
  1. select t.intime,t.outtime,trunc(24*(t.outtime-t.intime)) from hr_carding t
select t.intime,t.outtime,trunc(24*(t.outtime-t.intime)) from hr_carding t



14〉获得两个日期之间的天数

Java代码 复制代码 收藏代码
  1. select t.begintime,t.endtime,trunc(t.endtime-t.begintime) from hr_absence t
select t.begintime,t.endtime,trunc(t.endtime-t.begintime) from hr_absence t



15〉获得若干天前的时间 s

Java代码 复制代码 收藏代码
  1. elect sysdate,sysdate - N from dual;
elect sysdate,sysdate - N from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval 'N' day from dual
select sysdate,sysdate - interval 'N' day from dual



16〉获得若干天后的时间

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + N from dual;
select sysdate,sysdate + N from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + interval 'N' day from dual
select sysdate,sysdate + interval 'N' day from dual



注释:"N"表示需要减去或者加上的天数

17〉获得若干年前的时间

Java代码 复制代码 收藏代码
  1. select sysdate,add_months(sysdate,-12*N) from dual;
select sysdate,add_months(sysdate,-12*N) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - interval 'N' year from dual
select sysdate,sysdate - interval 'N' year from dual



16〉获得若干年后的时间

Java代码 复制代码 收藏代码
  1. select sysdate,add_months(sysdate,12*N) from dual;
select sysdate,add_months(sysdate,12*N) from dual;


或者

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate + interval 'N' year from dual
select sysdate,sysdate + interval 'N' year from dual



注释:"N"表示需要减去或者加上的年数

17〉相隔若干小时的时间

Java代码 复制代码 收藏代码
  1. select sysdate,sysdate - M * interval 'N' hour from dual
select sysdate,sysdate - M * interval 'N' hour from dual 



18〉检索出某一个日期所在月份的所有天信息

Java代码 复制代码 收藏代码
  1. select trunc(to_date('X','yyyymmdd'),'mm') from dual
  2. union all
  3. select trunc(to_date('X','yyyymmdd'),'mm') + rownum from dual
  4. connect by rownum <= (last_day(to_date('X','yyyymmdd')) - trunc(to_date('X','yyyymmdd'),'mm'))
select trunc(to_date('X','yyyymmdd'),'mm') from dual
union all
select trunc(to_date('X','yyyymmdd'),'mm') + rownum from dual
connect by rownum <= (last_day(to_date('X','yyyymmdd')) - trunc(to_date('X','yyyymmdd'),'mm'))



或者

Java代码 复制代码 收藏代码
  1. select first + rownum - 1 myday
  2. from (select trunc(to_date('X','yyyymmdd'),'MM') first,trunc(last_day(to_date('X','yyyymmdd'))) last from dual)
  3. connect by rownum <= last - first + 1
select first + rownum - 1 myday
from (select trunc(to_date('X','yyyymmdd'),'MM') first,trunc(last_day(to_date('X','yyyymmdd'))) last from dual)
connect by rownum <= last - first + 1



其中:字符串'X'表示某一个日期

19〉怎样知道今天是星期几

Java代码 复制代码 收藏代码
  1. select to_char(sysdate,'day') from dual;
select to_char(sysdate,'day') from dual; 


在获取之前可以设置日期语言,如:

Java代码 复制代码 收藏代码
  1. ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';


还可以在函数中指定

Java代码 复制代码 收藏代码
  1. select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = AMERICAN') from dual;
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = AMERICAN') from dual; 


其它更多用法,可以参考to_char与to_date函数

20〉本月的天数

Java代码 复制代码 收藏代码
  1. SELECT to_char(last_day(SYSDATE),'dd') days FROM dual
SELECT to_char(last_day(SYSDATE),'dd') days FROM dual



21〉今年的天数

Java代码 复制代码 收藏代码
  1. select add_months(trunc(sysdate, 'year'), 12) - trunc(sysdate, 'year') /*下一年的第一天减去今年的第一天*/
  2. from dual
select add_months(trunc(sysdate, 'year'), 12) - trunc(sysdate, 'year') /*下一年的第一天减去今年的第一天*/
from dual



22〉下个星期一的日期

Java代码 复制代码 收藏代码
  1. SELECT Next_day(SYSDATE,'monday') FROM dual
SELECT Next_day(SYSDATE,'monday') FROM dual



23〉怎么样从数据库中获得毫秒
9i以上版本,有一个timestamp类型获得毫秒,如

Java代码 复制代码 收藏代码
  1. select to_char(systimestamp ,'yyyy-mm-dd hh24:mi:ssxff') time1,
  2. to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ssxff') time2
  3. from dual;
select to_char(systimestamp ,'yyyy-mm-dd hh24:mi:ssxff') time1, 
to_char(current_timestamp,'yyyy-mm-dd hh24:mi:ssxff') time2 
from dual;



24〉检索某一年度的日历表:

Java代码 复制代码 收藏代码
  1. select case
  2. when (new_yweek = min(new_yweek)
  3. over(partition by mon order by new_yweek)) then
  4. mon
  5. else
  6. null
  7. end as mon,
  8. new_yweek as yweek,
  9. row_number() over(partition by mon order by new_yweek) as mweek,
  10. sum(decode(wday, '1', mday, null)) as sunday,
  11. sum(decode(wday, '2', mday, null)) as monday,
  12. sum(decode(wday, '3', mday, null)) as tuesday,
  13. sum(decode(wday, '4', mday, null)) as wednesday,
  14. sum(decode(wday, '5', mday, null)) as thursday,
  15. sum(decode(wday, '6', mday, null)) as friday,
  16. sum(decode(wday, '7', mday, null)) as saturday,
  17. &year as year
  18. from (select to_date(&year || '0101', 'yyyymmdd') + rownum - 1 as everyday,
  19. to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  20. 'mm') as mon,
  21. to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  22. 'w') as mweek,
  23. to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  24. 'ww') as yweek,
  25. case
  26. when (to_char(to_date(&year || '0101', 'yyyymmdd'), 'd') > '1') and
  27. (to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  28. 'd') <
  29. to_char(to_date(&year || '0101', 'yyyymmdd'), 'd')) then
  30. to_char(to_char(to_date(&year || '0101', 'yyyymmdd') +
  31. rownum - 1,
  32. 'ww') + 1,
  33. 'fm00')
  34. else
  35. to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  36. 'ww')
  37. end as new_yweek,
  38. to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  39. 'd') as wday,
  40. to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
  41. 'dd') as mday
  42. from (select rownum r from dual connect by rownum <= 366)
  43. where rownum <=
  44. to_char(to_date(&year || '1231', 'yyyymmdd'), 'ddd'))
  45. group by mon, new_yweek
select case
when (new_yweek = min(new_yweek)
over(partition by mon order by new_yweek)) then
mon
else
null
end as mon,
new_yweek as yweek,
row_number() over(partition by mon order by new_yweek) as mweek,
sum(decode(wday, '1', mday, null)) as sunday,
sum(decode(wday, '2', mday, null)) as monday,
sum(decode(wday, '3', mday, null)) as tuesday,
sum(decode(wday, '4', mday, null)) as wednesday,
sum(decode(wday, '5', mday, null)) as thursday,
sum(decode(wday, '6', mday, null)) as friday,
sum(decode(wday, '7', mday, null)) as saturday,
&year as year
from (select to_date(&year || '0101', 'yyyymmdd') + rownum - 1 as everyday,
to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'mm') as mon,
to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'w') as mweek,
to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'ww') as yweek,
case
when (to_char(to_date(&year || '0101', 'yyyymmdd'), 'd') > '1') and
(to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'd') <
to_char(to_date(&year || '0101', 'yyyymmdd'), 'd')) then
to_char(to_char(to_date(&year || '0101', 'yyyymmdd') +
rownum - 1,
'ww') + 1,
'fm00')
else
to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'ww')
end as new_yweek,
to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'd') as wday,
to_char(to_date(&year || '0101', 'yyyymmdd') + rownum - 1,
'dd') as mday
from (select rownum r from dual connect by rownum <= 366)
where rownum <=
to_char(to_date(&year || '1231', 'yyyymmdd'), 'ddd'))
group by mon, new_yweek
分享到:
评论

相关推荐

    oracle日期时间判断函数

    Oracle提供了丰富的日期时间函数,用于处理和分析日期时间数据。针对标题"oracle日期时间判断函数"和描述中提到的内容,我们可以深入探讨两个关键的函数,它们主要用于判断字符串是否可以转换为合法的日期时间格式。...

    oracle自定义日期函数

    Oracle 日期处理函数是数据库管理系统中非常重要的一部分,最近看到有人在做 T-SQL 与 PL/SQL 的转化,问了些有关时间函数的处理。在 PL/SQL 中,Oracle 提供了其他的方法来处理日期函数,例如 DATE_ADD 函数。在 T-...

    ORACLE日期时间函数大全

    ORACLE日期时间函数大全

    简单的oracle 时间比较函数

    简单的oracle 时间比较函数,自己在网上找到并加以整理出来。

    Oracle日期函数练习

    Oracle 日期函数是 Oracle 数据库中的一组功能强大且广泛使用的函数,它们可以对日期进行各种操作和计算,本次练习涵盖了 Oracle 中常用的日期函数,包括获取当前系统时间、对日期的月进行加减、获取给定日期所在月...

    ORACLE中日期和时间函数汇总

    ORACLE 中日期和时间函数汇总 Oracle 中的日期和时间函数是数据库管理系统中非常重要的一部分,掌握这些函数可以帮助开发者和 DBA 更好地处理日期和时间相关的操作。 日期和字符转换函数 Oracle 中提供了两个...

    PostgreSQL日期/时间函数(兼容oracle)

    为了提供与Oracle数据库兼容的功能,PostgreSQL包含了丰富的日期/时间函数。本文将详细阐述这些函数的使用及其特点。 首先,我们要理解一个示例中的疑惑:在SQL查询`select now(), pg_sleep_for('5 second'), now()...

    Oracle常用日期型函数

    Oracle常用日期型函数,大家经常想用的,又不想记得。现在,给你一个方便的资源

    oracle日期函数全面总结

    通过学习和掌握以上Oracle日期函数,你可以轻松地进行日期和时间的计算、比较和格式化,提升数据库操作的效率。同时,了解如何处理时区问题也是非常重要的,特别是在分布式系统中。希望这些知识对你在处理Oracle...

    oracle数据库时间函数

    Oracle 数据库中并没有直接使用 `CONVERT` 函数来处理日期和时间的方式,这个函数在 SQL Server 中被用来进行数据类型的转换,特别是日期和时间类型的转换。然而,Oracle 提供了类似的功能,如 `TO_DATE` 和 `TO_...

    oracle日期时间函数大全.pdf

    Oracle 日期时间函数大全 Oracle 日期时间函数大全是 Oracle 中处理日期和时间的函数大全。这些函数可以用于各种日期和时间相关的操作,如日期转换、时间计算等。 日期和时间函数 Oracle 提供了多种日期和时间...

    oracle日期及时间格式

    * 在使用日期及时间函数时,需要注意函数的使用规则,避免出现错误。 Oracle 日期及时间格式是 Oracle 编程语言中一个非常重要的组成部分,了解 Oracle 日期及时间格式可以帮助开发者更好地处理日期及时间相关的...

    Oracle PL/SQL语言初级教程

    单行函数处理单行数据,如字符串操作、数学运算和日期时间处理等。组函数,如SUM、AVG和COUNT,用于处理多行数据并返回单一结果。你可以自定义函数,也可以使用Oracle提供的内置函数。 在数据库管理方面,表是数据...

    Oracle日期函数大全[文].pdf

    Oracle日期函数大全是Oracle数据库中处理日期和时间的函数大全,包括TO_DATE、TO_CHAR等函数。这些函数可以对日期和时间进行各种操作,例如将日期转换为字符串、获取当前日期和时间、计算两个日期之间的天数等。 TO...

    oracle 函数大全 参考函数 手册 速查 chm格式

    3. 日期时间函数:如SYSDATE(获取当前系统日期)、ADD_MONTHS(添加月份)、EXTRACT(提取日期部分)等,便于对日期和时间进行操作。 4. 转换函数:如TO_CHAR(字符串转换为日期或数字)、TO_DATE(日期转换为字符...

    Oracle PL/SQL编程及最佳实践

    日期类型包括日期、时间等。 十、基本类型(系统预定义类型) PL/SQL 提供了多种基本类型,例如数字、字符、日期等。这些类型是 Oracle 预定义的,用户可以直接使用。 十一、复合类型(用户自定义类型) PL/SQL ...

Global site tag (gtag.js) - Google Analytics