知识大全 oracle时间用法

Posted 时间

篇首语:知识是产生对人类自由的热爱和原则的唯一源泉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle时间用法相关的知识,希望对你有一定的参考价值。

  oracle中 小时的表示方法 贴出来与大家共享!

   小时表示方法 to_date( : : yyyy mm dd hh :mi:ss )

   小时表示方法 to_date( : : yyyy mm dd hh:mi:ss )

  select  usernumber from usertailor  where createtime>to_date( : : yyyy mm dd hh :mi:ss );

  

  常用日期型函数

   Sysdate 当前日期和时间

  SQL> Select sysdate from dual;

  SYSDATE

  

   月

   Last_day 本月最后一天

  SQL> Select last_day(sysdate) from dual;

  LAST_DAY(S

  

   月

   Add_months(d n) 当前日期d后推n个月

  用于从一个日期值增加或减少一些月份

  date_value:=add_months(date_value number_of_months)

  SQL> Select add_months(sysdate ) from dual;

  ADD_MONTHS

  

   月

   Months_beeen(f s) 日期f和s间相差月数

  SQL> select months_beeen(sysdate to_date( yyyy mm dd ))from dual;

  MONTHS_BEEEN(SYSDATE TO_DATE( YYYY MM DD ))

  

  

   NEXT_DAY(d day_of_week)

  返回由 day_of_week 命名的 在变量 d 指定的日期之后的第一个工作日的日期 参数 day_of_week 必须为该星期中的某一天

  SQL> SELECT next_day(to_date( YYYYMMDD ) ) FROM dual;

  NEXT_DAY(T

  

   月

   current_date()返回当前会话时区中的当前日期

  date_value:=current_date

  SQL> column sessiontimezone for a

  SQL> select sessiontimezone current_date from dual;

  SESSIONTIMEZONE CURRENT_DA

  

  + :           月

  SQL> alter session set time_zone= :   /

  会话已更改

  SQL> select sessiontimezone current_timestamp from dual;

  SESSIONTIMEZONE CURRENT_TIMESTAMP

  

   :           月 下午 :

   current_timestamp()以timestamp with time zone数据类型返回当前会话时区中的当前日期

  SQL> select current_timestamp from dual;

  CURRENT_TIMESTAMP

  

   月 上午 + :

   dbtimezone()返回时区

  SQL> select dbtimezone from dual;

  DBTIME

  

   :

   extract()找出日期或间隔值的字段值

  date_value:=extract(date_field from [datetime_value|interval_value])

  SQL> select extract(month from sysdate) This Month from dual;

  This Month

  

  

  SQL> select extract(year from add_months(sysdate )) Years from dual;

  Years

  

  

   localtimestamp()返回会话中的日期和时间

  SQL> select localtimestamp from dual;

  LOCALTIMESTAMP

  

   月 上午

  常用日期数据格式(该段为摘抄)

  Y或YY或YYY 年的最后一位 两位或三位 Select to_char(sysdate YYY ) from dual 表示 年

  SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate SYEAR ) from dual 表示公元前 年

  Q 季度 ~ 月为第一季度 Select to_char(sysdate Q ) from dual 表示第二季度①

  MM 月份数 Select to_char(sysdate MM ) from dual 表示 月

  RM 月份的罗马表示 Select to_char(sysdate RM ) from dual IV表示 月

  Month 用 个字符长度表示的月份名 Select to_char(sysdate Month ) from dual May后跟 个空格表示 月

  WW 当年第几周 Select to_char(sysdate WW ) from dual 表示 年 月 日为第 周

  W 本月第几周 Select to_char(sysdate W ) from dual 年 月 日为第 周

  DDD 当年第几 月 日为 月 日为 Select to_char(sysdate DDD ) from dual 年 月 日为第 天

  DD 当月第几天 Select to_char(sysdate DD ) from dual 月 日为第 天

  D 周内第几天 Select to_char(sysdate D ) from dual 年 月 日为星期一

  DY 周内第几天缩写 Select to_char(sysdate DY ) from dual SUN 年 月 日为星期天

  HH或HH 进制小时数 Select to_char(sysdate HH ) from dual 午夜 点过 分为

  HH 小时制 Select to_char(sysdate HH ) from dual 下午 点 分为

  MI 分钟数( ~ ) Select to_char(sysdate MI ) from dual 下午 点 分

  SS 秒数( ~ ) Select to_char(sysdate SS ) from dual 点 分 秒

  提示注意不要将MM格式用于分钟(分钟应该使用MI) MM是用于月份的格式 将它用于分钟也能工作 但结果是错误的

  现在给出一些实践后的用法

   上月末天

  SQL> select to_char(add_months(last_day(sysdate) ) yyyy MM dd ) LastDay from

  dual;

  LASTDAY

  

  

   上月今天

  SQL> select to_char(add_months(sysdate ) yyyy MM dd ) PreToday from dual;

  PRETODAY

  

  

   上月首天

  SQL> select to_char(add_months(last_day(sysdate)+ ) yyyy MM dd ) firstDay from dual;

  FIRSTDAY

  

  

   按照每周进行统计

  SQL> select to_char(sysdate ww ) from dual group by to_char(sysdate ww );

  TO

  

  

   按照每月进行统计

  SQL> select to_char(sysdate mm ) from dual group by to_char(sysdate mm );

  TO

  

  

   按照每季度进行统计

  SQL> select to_char(sysdate q ) from dual group by to_char(sysdate q );

  T

  

  

   按照每年进行统计

  SQL> select to_char(sysdate yyyy ) from dual group by to_char(sysdate yyyy );

  TO_C

  

  

   要找到某月中所有周五的具体日期

  select to_char(t d YY MM DD ) from (

  select trunc(sysdate MM )+rownum as d

  from dba_objects

  where rownum < ) t

  where to_char(t d MM ) = to_char(sysdate MM ) 找出当前月份的周五的日期

  and trim(to_char(t d Day )) = 星期五

  

  

  

  

  

  

  如果把where to_char(t d MM ) = to_char(sysdate MM )改成sysdate 即为查找当前月份的前三个月中的每周五的日期

   oracle中时间运算

  内容如下

   oracle支持对日期进行运算

   日期运算时是以天为单位进行的

   当需要以分秒等更小的单位算值时 按时间进制进行转换即可

   进行时间进制转换时注意加括号 否则会出问题

  SQL> alter session set nls_date_format= yyyy mm dd hh:mi:ss ;

  会话已更改

  SQL> set serverout on

  SQL> declare

   DateValue date;

   begin

   select sysdate into DateValue from dual;

   dbms_output put_line( 源时间: ||to_char(DateValue));

   dbms_output put_line( 源时间减 天: ||to_char(DateValue ));

   dbms_output put_line( 源时间减 天 小时: ||to_char(DateValue / ));

   dbms_output put_line( 源时间减 天 小时 分: ||to_char(DateValue / /( * )));

   dbms_output put_line( 源时间减 天 小时 分 秒: ||to_char(DateValue / /( * ) /( * * )));

   end;

   /

  源时间: : :

  源时间减 天: : :

  源时间减 天 小时: : :

  源时间减 天 小时 分: : :

  源时间减 天 小时 分 秒: : :

  PL/SQL 过程已成功完成

  在Oracle中实现时间相加处理

   名称 Add_Times

   功能 返回d 与NewTime相加以后的结果 实现时间的相加

   说明 对于NewTime中的日期不予考虑

   日期

   版本

   作者 Kevin

  create or replace function Add_Times(d in date NewTime in date) return date

  is

  hh   number;

  mm   number;

  ss   number;

  hours number;

  dResult  date;

  begin

   下面依次取出时 分 秒

  select to_number(to_char(NewTime HH )) into hh from dual;

  select to_number(to_char(NewTime MI )) into mm from dual;

  select to_number(to_char(NewTime SS )) into ss from dual;

   换算出NewTime中小时总和 在一天的百分几

  hours := (hh + (mm / ) + (ss / ))/ ;

   得出时间相加后的结果

  select d + hours into dResult from dual;

  return(dResult);

  end Add_Times;

   测试用例

   select Add_Times(sysdate to_date( : : YYYY MM DD HH :MI:SS )) from dual

  在Oracle i中计算时间差

  计算时间差是Oracle DATA数据类型的一个常见问题 Oracle支持日期计算 你可以创建诸如 日期 -日期 这样的表达式来计算这两个日期之间的时间差

  一旦你发现了时间差异 你可以使用简单的技巧来以天 小时 分钟或者秒为单位来计算时间差 为了得到数据差 你必须选择合适的时间度量单位 这样就可以进行数据格式隐藏

  使用完善复杂的转换函数来转换日期是一个诱惑 但是你会发现这不是最好的解决方法

  round(to_number(end date start_date)) 消逝的时间(以天为单位)

  round(to_number(end date start_date)* ) 消逝的时间(以小时为单位)

  round(to_number(end date start_date)* ) 消逝的时间(以分钟为单位)

  显示时间差的默认模式是什么?为了找到这个问题的答案 让我们进行一个简单的SQL *Plus查询

  SQL> select sysdate (sysdate ) from dual;

  SYSDATE (SYSDATE )

  

  

  这里 我们看到了Oracle使用天来作为消逝时间的单位 所以我们可以很容易的使用转换函数来把它转换成小时或者分钟 然而 当分钟数不是一个整数时 我们就会遇到放置小数点的问题

  Select

  (sysdate (sysdate ))*

  from

  dual;

  (SYSDATE (SYSDATE ))*

  

  

  当然 我们可以用ROUND函数(即取整函数)来解决这个问题 但是要记住我们必须首先把DATE数据类型转换成NUMBER数据类型

  Select

  round(to_number(sysdate (sysdate ))* )

  from

  dual;

  ROUND(TO_NUMBER(SYSDATE (SYSDATE ))* )

  

  

  我们可以用这些函数把一个消逝时间近似转换成分钟并把这个值写入Oracle表格中 在这个例子里 我们有一个离线(logoff)系统级触发机制来计算已经开始的会话时间并把它放入一个Oracle STATSPACK USER_LOG扩展表格之中

  Update

  perfstat stats$user_log

  set

  elapsed_minutes =

  round(to_number(logoff_time logon_time)* )

  where

  user = user_id

  and

  elapsed_minutes is NULL;

  查出任一年月所含的工作日

  CREATE OR REPLACE FUNCTION Get_WorkingDays(

  ny IN VARCHAR

  ) RETURN INTEGER IS

  /*

  函数名称 Get_WorkingDays

  中文名称 求某一年月中共有多少工作日

  作者姓名: XINGPING

  编写时间:

  输入参数 NY:所求包含工作日数的年月 格式为yyyymm 如

  返 回 值 整型值 包含的工作日数目

  算法描述

   ) 列举出参数给出的年月中的每一天 这里使用了一个表(ljrq是我的库中的一张表 这个表可以是有权访问的 记录条数至少为 的任意一张表或视图)来构造出某年月的每一天

   ) 用这些日期和一个已知星期几的日期相减( 是星期天) 所得的差再对 求模 如果所求年月在 以前 那么所得的差既是负数 求模后所得值范围为大于 小于 如 表示星期六 故先将求模的结果加 再求 的模

   ) 过滤掉结果集中值为 和 的元素 然后求count 所得即为工作日数目

   */

  Result INTEGER;

  BEGIN

  SELECT COUNT(*) INTO Result

  FROM (SELECT MOD(MOD(q rq to_date( yyyy mm dd ) ) ) weekday

  FROM ( SELECT to_date(ny||t dd yyyymmdd ) rq

  FROM (SELECT substr( +ROWNUM ) dd

  FROM ljrq z WHERE Rownum<=

  ) t

  WHERE to_date(ny||t dd yyyymmdd )

  BEEEN to_date(ny yyyymm )

  AND last_day(to_date(ny yyyymm ))

  )q

  ) a

  WHERE a weekday NOT IN( );

  RETURN Result;

  END Get_WorkingDays;

  ______________________________________

  还有一个版本

  CREATE OR REPLACE FUNCTION Get_WorkingDays(

  ny IN VARCHAR

  ) RETURN INTEGER IS

  /*

  函数名称 Get_WorkingDays

  中文名称 求某一年月中共有多少工作日

  作者姓名: XINGPING

  编写时间:

  输入参数 NY:所求包含工作日数的年月 格式为yyyymm 如

  返 回 值 整型值 包含的工作日数目

  算法描述 使用Last_day函数计算出参数所给年月共包含多少天 根据这个值来构造一个循环 在这个循环中先求这个月的每一天与一个已知是星期天的日期( 是星期天)的差 所得的差再对 求模 如果所求日期在 以前 那么所得的差既是负数 求模后所得值范围为大于 小于 如 表示星期六 故先将求模的结果加 再求 的模 如过所得值不等于 和 (即不是星期六和星期天) 则算一个工作日

   */

  Result INTEGER := ;

  myts INTEGER;      所给年月的天数

  scts INTEGER;      某天距 所差的天数

  rq   DATE;

  djt INTEGER := ;  

  BEGIN

  myts := to_char(last_day(to_date(ny yyyymm )) dd );

  LOOP

  rq := TO_date(ny||substr( +djt ) yyyymmdd );

  scts := rq to_date( yyyy mm dd );

  IF MOD(MOD(scts )+ ) NOT IN( ) THEN

  Result := Result + ;

  END IF;

  djt := djt + ;

  EXIT WHEN djt>myts;

  END LOOP;

  RETURN Result;

cha138/Article/program/Oracle/201311/18138

相关参考

知识大全 Oracle中的临时表用法汇总

Oracle中的临时表用法汇总  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!语法  在Oracle

知识大全 Oracle中序列sequence用法

Oracle中序列sequence用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  )建立序列

知识大全 oracle存储过程的用法

  createtablestuInfo  (  stuIDintprimarykey  stuNamevarchar()  )  createorreplaceprocedureproc  is  

知识大全 Oracle外连接和“+”号的用法

Oracle外连接和“+”号的用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于外连接Or

知识大全 Oracle的Package的作用及用法

Oracle的Package的作用及用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  公司需求

知识大全 Oracle临时表用法的经验心得

Oracle临时表用法的经验心得  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文章主要介绍的是

知识大全 Oracle JOB 用法小结

OracleJOB用法小结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一设置初始化参数job

知识大全 oracle中substr函数的用法

  Inoracle/PLSQLthesubstrfunctionsallowsyoutoextractasubstringfromastring  Thesyntaxforthesubstrfunc

知识大全 oracle函数mergininto用法

  所有的MIS系统都存在一个同样的需求就是对于特定的数据在一次批量操作过程中如果数据已经存在则对存在的数据按照现有情况进行  更新如果不存在则需要加入数据库这时我们就可以考虑采用Oracle的MER

知识大全 oracle数据库中关于游标的常见用法

cha138/Article/program/Oracle/201311/19107