知识大全 Oracle中对时间操作的一些总结

Posted 时间

篇首语:知识能使你增加一双眼睛。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle中对时间操作的一些总结相关的知识,希望对你有一定的参考价值。

Oracle中对时间操作的一些总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle中对时间操作的一些总结

  sysdate+( / / / ) 在系统时间基础上延迟 秒

  sysdate+ / / 在系统时间基础上延迟 分钟

  sysdate+ / 在系统时间基础上延迟 小时

  sysdate+ 在系统时间基础上延迟 天

  add_months(sysdate ) 在系统时间基础上延迟 月

  add_months(sysdate * ) 在系统时间基础上延迟 年

  上月末的日期 select last_day(add_months(sysdate )) from dual;

  本月的最后一秒 select trunc(add_months(sysdate ) MM ) / / / from dual

  本周星期一的日期 select trunc(sysdate day )+ from dual

  年初至今的天数 select ceil(sysdate trunc(sysdate year )) from dual;

  今天是今年的第几周 :select to_char(sysdate fmww ) from dual

  今天是本月的第几周:SELECT TO_CHAR(SYSDATE WW ) TO_CHAR(TRUNC(SYSDATE MM ) WW ) + AS weekOfMon FROM dual

  本月的天数

  SELECT to_char(last_day(SYSDATE) dd ) days FROM dual

  今年的天数

  select add_months(trunc(sysdate year ) ) trunc(sysdate year ) from dual

  下个星期一的日期

  SELECT Next_day(SYSDATE monday ) FROM dual

  ============================================

   计算工作日方法

  create table t(s date e date);

  alter session set nls_date_format = yyyy mm dd ;

  insert into t values( );

  insert into t values( );

  insert into t values( );

  insert into t values( );

  insert into t values( );

  insert into t values( );

   这里假定日期都是不带时间的 否则在所有日期前加trunc即可

  select s e e s+ total_days

  trunc((e s+ )/ )* + length(replace(substr( to_char(s d ) mod(e s+ )) )) work_days

  from t;

   drop table t;

  引此 ?s= cd f b bc adbe cde f &threadid= &perpage= &pagenumber=

  ================================================================================

  判断当前时间是上午下午还是晚上

  SELECT CASE

  WHEN to_number(to_char(SYSDATE hh )) BEEEN AND THEN 上午

  WHEN to_number(to_char(SYSDATE hh )) BEEEN AND THEN 下午

  WHEN to_number(to_char(SYSDATE hh )) BEEEN AND THEN 晚上

  END

  FROM dual;

  ================================================================================

  Oracle 中的一些处理日期

  将数字转换为任意时间格式 如秒:需要转换为天/小时

  SELECT to_char(floor(TRUNC( /( * ))/ ))|| 天 ||to_char(mod(TRUNC( /( * )) ))|| 小时 FROM DUAL

  TO_DATE格式

  Day:

  dd number

  dy abbreviated fri

  day spelled out friday

  ddspth spelled out ordinal elfth

  Month:

  mm number

  mon abbreviated mar

  month spelled out march

  Year:

  yy o digits

  yyyy four digits

   小时格式下时间范围为 : : : :

   小时格式下时间范围为 : : : :

  

  日期和字符转换函数用法(to_date to_char)

  

  select to_char( to_date( J ) Jsp ) from dual

  显示Two Hundred Twenty Two

  

  求某天是星期几

  select to_char(to_date( yyyy mm dd ) day ) from dual;

  星期一

  select to_char(to_date( yyyy mm dd ) day NLS_DATE_LANGUAGE = American ) from dual;

  monday

  设置日期语言

  ALTER SESSION SET NLS_DATE_LANGUAGE= AMERICAN ;

  也可以这样

  TO_DATE ( YYYY mm dd NLS_DATE_LANGUAGE = American )

  

  两个日期间的天数

  select floor(sysdate to_date( yyyymmdd )) from dual;

   时间为null的用法

  select id active_date from table

  UNION

  select TO_DATE(null) from dual;

  注意要用TO_DATE(null)

  

  a_date beeen to_date( yyyymmdd ) and to_date( yyyymmdd )

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

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

   日期格式冲突问题

  输入的格式要看你安装的ORACLE字符集的类型 比如: US ASCII date格式的类型就是: Jan

  alter system set NLS_DATE_LANGUAGE = American

  alter session set NLS_DATE_LANGUAGE = American

  或者在to_date中写

  select to_char(to_date( yyyy mm dd ) day NLS_DATE_LANGUAGE = American ) from dual;

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

  可查看

  select * from nls_session_parameters

  select * from V$NLS_PARAMETERS

  

  select count(*)

  from ( select rownum rnum

  from all_objects

  where rownum <= to_date( yyyy mm dd ) to_date( yyyy mm dd )+

  )

  where to_char( to_date( yyyy mm dd )+rnum D )

  not

  in ( )

  查找 至 间除星期一和七的天数

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

  

  select months_beeen(to_date( MM DD YYYY )

  to_date( MM DD YYYY )) MONTHS FROM DUAL;

  

  select months_beeen(to_date( MM DD YYYY )

  to_date( MM DD YYYY )) MONTHS FROM DUAL;

  

   Next_day的用法

  Next_day(date day)

  Monday Sunday for format code DAY

  Mon Sun for format code DY

   for format code D

  

  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;

  

  获得小时数

  SELECT EXTRACT(HOUR FROM TIMESTAMP : : ) from offer

  SQL> select sysdate to_char(sysdate hh ) from dual;

  SYSDATE TO_CHAR(SYSDATE HH )

  

   : :

  SQL> select sysdate to_char(sysdate hh ) from dual;

  SYSDATE TO_CHAR(SYSDATE HH )

  

   : :

  获取年月日与此类似

  

  年月日的处理

  select older_date

  newer_date

  years

  months

  abs(

  trunc(

  newer_date

  add_months( older_date years* +months )

  )

  ) days

  from ( select

  trunc(months_beeen( newer_date older_date )/ ) YEARS

  mod(trunc(months_beeen( newer_date older_date ))

   ) MONTHS

  newer_date

  older_date

  from ( select hiredate older_date

  add_months(hiredate rownum)+rownum newer_date

  from emp )

  )

  

  处理月份天数不定的办法

  select to_char(add_months(last_day(sysdate) + ) yyyymmdd ) last_day(sysdate) from dual

  

  找出今年的天数

  select add_months(trunc(sysdate year ) ) trunc(sysdate year ) from dual

  闰年的处理方法

  to_char( last_day( to_date( ¦ ¦ :year mmyyyy ) ) dd )

  如果是 就不是闰年

  

  yyyy与rrrr的区别

   YYYY TO_C

  

  yyyy

  rrrr

  yyyy

  rrrr

   不同时区的处理

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

  from dual;

  

   秒钟一个间隔

  Select TO_DATE(FLOOR(TO_CHAR(sysdate SSSSS )/ ) * SSSSS ) TO_CHAR(sysdate SSSSS )

  from dual

   : :

  SSSSS表示 位秒数

  

  一年的第几天

  select TO_CHAR(SYSDATE DDD ) sysdate from dual

   : :

   计算小时 分 秒 毫秒

  select

  Days

  A

  TRUNC(A* ) Hours

  TRUNC(A* * *TRUNC(A* )) Minutes

  TRUNC(A* * * *TRUNC(A* * )) Seconds

  TRUNC(A* * * * *TRUNC(A* * * )) mSeconds

  from

  (

  select

  trunc(sysdate) Days

  sysdate trunc(sysdate) A

  from dual

  )

  select * from tabname

  order by decode(mode FIFO )*to_char(rq yyyymmddhh miss );

  //

  floor((date date ) / ) 作为年

  floor((date date ) / ) 作为月

  mod(mod(date date ) )作为日

   next_day函数

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

  

  日 一 二 三 四 五 六

  

  select (sysdate to_date( : : yyyy mm dd hh :mi:ss ))* * * from dual

  日期 返回的是天 然后 转换为ss

  转此 ;ID=

  将数字转换为任意时间格式 如秒:需要转换为天/小时

  SELECT to_char(floor(TRUNC( /( * ))/ ))|| 天 ||to_char(mod(TRUNC( /( * )) ))|| 小时 FROM DUAL

  TO_DATE格式

  Day:

  dd number

  dy abbreviated fri

  day spelled out friday

  ddspth spelled out ordinal elfth

  Month:

  mm number

  mon abbreviated mar

  month spelled out march

  Year:

  yy o digits

  yyyy four digits

   小时格式下时间范围为 : : : :

   小时格式下时间范围为 : : : :

  

  日期和字符转换函数用法(to_date to_char)

  

  select to_char( to_date( J ) Jsp ) from dual

  显示Two Hundred Twenty Two

  

  求某天是星期几

  select to_char(to_date( yyyy mm dd ) day ) from dual;

  星期一

  select to_char(to_date( yyyy mm dd ) day NLS_DATE_LANGUAGE = American ) from dual;

  monday

  设置日期语言

  ALTER SESSION SET NLS_DATE_LANGUAGE= AMERICAN ;

  也可以这样

  TO_DATE ( YYYY mm dd NLS_DATE_LANGUAGE = American )

  

  两个日期间的天数

  select floor(sysdate to_date( yyyymmdd )) from dual;

   时间为null的用法

  select id active_date from table

  UNION

  select TO_DATE(null) from dual;

  注意要用TO_DATE(null)

  

  a_date beeen to_date( yyyymmdd ) and to_date( yyyymmdd )

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

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

   日期格式冲突问题

  输入的格式要看你安装的ORACLE字符集的类型 比如: US ASCII date格式的类型就是: Jan

  alter system set NLS_DATE_LANGUAGE = American

  alter session set NLS_DATE_LANGUAGE = American

  或者在to_date中写

  select to_char(to_date( yyyy mm dd ) day NLS_DATE_LANGUAGE = American ) from dual;

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

  可查看

  select * from nls_session_parameters

  select * from V$NLS_PARAMETERS

  

  select count(*)

  from ( select rownum rnum

  from all_objects

  where rownum <= to_date( yyyy mm dd ) to_date( yyyy mm dd )+

  )

  where to_char( to_date( yyyy mm dd )+rnum D )

  not

  in ( )

  查找 至 间除星期一和七的天数

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

  

  select months_beeen(to_date( MM DD YYYY )

  to_date( MM DD YYYY )) MONTHS FROM DUAL;

  

  select months_beeen(to_date( MM DD YYYY )

  to_date( MM DD YYYY )) MONTHS FROM DUAL;

  

   Next_day的用法

  Next_day(date day)

  Monday Sunday for format code DAY

  Mon Sun for format code DY

   for format code D

  

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

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

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

  create or replace function sys_date return date is

  begin

  return sysdate;

cha138/Article/program/Oracle/201311/16736

相关参考

知识大全 在Oracle10g和9i上一些新的特性的总结

在Oracle10g和9i上一些新的特性的总结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!内部P

知识大全 Oracle中日期时间的操作比较和加减

Oracle中日期时间的操作比较和加减  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracl

知识大全 Oracle中对COLUMNS

Oracle中对COLUMNS  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文详细讲述了Or

知识大全 Delphi中对Oracle存取RTF文档

Delphi中对Oracle存取RTF文档  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关系数

知识大全 oracle数据库sql的优化总结

  自己对oraclesql的一些优化总结自己也记录下来也希望对大家有帮助  一使用where少使用having;  二查两张以上表时把记录少的放在右边;  三减少对表的访问次数;  四有where子

知识大全 Oracle中对像名大小写敏感性的深入解析

Oracle中对像名大小写敏感性的深入解析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一般情

知识大全 基于php常用函数总结(数组,字符串,时间,文件操作)

  数组:【重点】implode(分隔arr)把数组值数据按指定字符连接起来例如$arr=array();$str=implode($arr);explode([分隔]arr)按指定规则对一个字符串进

知识大全 oracle 使用杂记二

  下面的是关于sql*loader的使用的一点总结有些是来自itpub上的一些网友的总结    大部分是oracle专家高级编程上的实例只是我实践以后写的结果    sqlldruserid=lgo

知识大全 oracle日期操作方法

  在oracle中有很多关于日期的函数如:  add_months()用于从一个日期值增加或减少一些月份  date_value:=add_months(date_valuenumber_of_mo

知识大全 C#中对DatagridView部分常用操作

C#中对DatagridView部分常用操作  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  (最