zoukankan      html  css  js  c++  java
  • oracle 日期计算函数

    转:http://www.itpub.net/thread-468149-1-1.html

    最近看到有人在做t_sql与pl/sql的转化, 问了些有关时间函数的处理, 在此, 仅对t_sql中的dateadd函数做说明, 这个函数在pl/sql中没有对应的函数, 但是oracle提供了其他的方法来处理, 这里, 本人写了一个同名的函数 dateadd用于方便移植使用, 其中用到的处理时间的方法在oracle中也很通用.

    函数代码如下
    create or replace function DATEADD( datepart varchar2, num number, indate date ) return date is
    Result date;
    v_sql varchar2(1000);
    v_datepart varchar2(30);
    v_ms varchar2(13);
    begin
    v_datepart := lower(datepart);
    /*
    Datepart Abbreviations
    year yy, y
    quarter qq, q
    month mm, m
    day dd, d
    week wk, w
    hour hh, h
    minute mi, n
    second ss, s
    millisecond ms
    */
    case
    when v_datepart in ('year','yy','y') then
    v_sql := 'select :1 + interval '''||num||''' year from dual';
    when v_datepart in ('quarter','qq','q') then
    v_sql := 'select :1 + (interval ''3'' month) * '||num||' from dual';
    when v_datepart in ('month','mm','m') then
    v_sql := 'select :1 + interval '''||num||''' month from dual';
    when v_datepart in ('week','wk','w') then
    v_sql := 'select :1 + (interval ''7'' day) * '||num||' from dual';
    when v_datepart in ('day','dd','d') then
    v_sql := 'select :1 + interval '''||num||''' day from dual';
    when v_datepart in ('hour','hh') then
    v_sql := 'select :1 + interval '''||num||''' hour from dual';
    when v_datepart in ('minute','mi','n') then
    v_sql := 'select :1 + interval '''||num||''' minute from dual';
    when v_datepart in ('second','ss','s') then
    v_sql := 'select :1 + interval '''||num||''' second from dual';
    when v_datepart in ('millisecond','ms') then
    v_ms := to_char(num/1000,'fm999999990.000');
    v_sql := 'select :1 + interval '''||v_ms||''' second(9,3) from dual';
    else
    RAISE_APPLICATION_ERROR(-20001, ''''||datepart||''' is not a recognized dateadd option.' );
    end case;

    execute immediate v_sql into Result using indate;

    return(Result);

    EXCEPTION
    WHEN OTHERS THEN
    RAISE ;

    end DATEADD;

    函数中有一段注释, 是用来说明datepart的, 基本上和t_sql中的相同, 稍有修改

    使用示例如下:
    加三周时间:
    SQL> select dateadd('w',3,sysdate), sysdate from dual;

    DATEADD('W',3,SYSDATE) SYSDATE
    ---------------------- -----------
    2006-1-9 17:16:29 2005-12-19

    减一个季度时间:
    SQL> select dateadd('q',-1,sysdate), sysdate from dual;

    DATEADD('Q',-1,SYSDATE) SYSDATE
    ----------------------- -----------
    2005-9-19 17:22:00 2005-12-19

    大家随意点评吧

  • 相关阅读:
    cinder支持nfs快照
    浏览器输入URL到返回页面的全过程
    按需制作最小的本地yum源
    创建可执行bin安装文件
    RPCVersionCapError: Requested message version, 4.17 is incompatible. It needs to be equal in major version and less than or equal in minor version as the specified version cap 4.11.
    惠普IPMI登陆不上
    Linux进程状态——top,ps中看到进程状态D,S,Z的含义
    openstack-neutron基本的网络类型以及分析
    openstack octavia的实现与分析(二)原理,架构与基本流程
    flask上下文流程图
  • 原文地址:https://www.cnblogs.com/jackljf/p/3588982.html
Copyright © 2011-2022 走看看