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

    大家随意点评吧

  • 相关阅读:
    C#如何防止程序多次运行的技巧
    C#导出Excel按照指定格式设置单元格属性值
    js前台遍历后台返回的Datatable数据
    Datatable数据分组
    DataTable 详解(转)
    遍历Datatable
    DataTable转Json
    键值集合List转换成datatable
    DataTable转换成实体
    泛型集合与DataSet相互转换
  • 原文地址:https://www.cnblogs.com/jackljf/p/3588982.html
Copyright © 2011-2022 走看看