oracle 日期计算函数
来源:互联网 发布:淘宝什么叫发票抬头 编辑:程序博客网 时间:2024/04/29 13:02
转: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
大家随意点评吧
- oracle 日期计算函数
- Oracle 日期计算 与 ROUND TRUNC 函数日期计算
- Oracle一些日期计算的函数
- oracle分析函数lag/lead不能计算日期型数据?
- java如何计算相隔日期,oracle常用内置函数
- oracle 常用日期计算
- oracle 常用日期计算
- ORACLE日期计算
- 【转】Oracle日期计算
- oracle 日期计算
- oracle日期计算
- 计算日期差函数
- 日期计算小函数
- ORACLE日期类型的计算
- Oracle日期计算之INTERVAL
- 【转】Oracle日期计算2
- oracle日期及时间计算
- ORACLE计算日期的时间差
- 关于内核模块安装了,但是没有打印信息的解决
- 宏
- IMEI和IMSI有什么区别啊。分别是什么意思?有什么实际用途。
- [Android实例] ListView飞入加载item及滑动删除item [复制链接]
- java读写文件大全
- oracle 日期计算函数
- 【CF啥时候改成文件输出了0 0】CodeForce 253A—boys and girls
- java读写word文档,完美解决方案
- [Fedora]: Google Chrome安装错误,lsb >= 4.0 is needed by google-chrome-stable-13.0.782.112-95650.i386
- NSArry 为静态数组,不能往里面添加元素 NSMutableArray 为动态数组,是NSArray 的子类
- LINUX 安装G++时遇到的问题
- Android SAX解析与生成XML
- aspx上传、预览图片
- 《Windows核心编程系列》十一谈谈Windows线程池