用惯了mssql转用Oracle,真不习惯,好多存储过程都写错了
谁整理过它们不同的地方?麻烦给我做个参考,谢谢

解决方案 »

  1.   

    大哥,你这都不愿意自己查一下啊?有人早整理过了----数学函数1.绝对值
    S:select abs(-1) value
    O:select abs(-1) value from dual2.取整(大)
    S:select ceiling(-1.001) value
    O:select ceil(-1.001) value from dual3.取整(小)
    S:select floor(-1.001) value
    O:select floor(-1.001) value from dual4.取整(截取)
    S:select cast(-1.002 as int) value
    O:select trunc(-1.002) value from dual5.四舍五入
    S:select round(1.23456,4) value 1.23460
    O:select round(1.23456,4) value from dual 1.23466.e为底的幂
    S:select Exp(1) value 2.7182818284590451
    O:select Exp(1) value from dual 2.718281827.取e为底的对数
    S:select log(2.7182818284590451) value 1
    O:select ln(2.7182818284590451) value from dual; 18.取10为底对数
    S:select log10(10) value 1
    O:select log(10,10) value from dual; 19.取平方
    S:select SQUARE(4) value 16
    O:select power(4,2) value from dual 1610.取平方根
    S:select SQRT(4) value 2
    O:select SQRT(4) value from dual 211.求任意数为底的幂
    S:select power(3,4) value 81
    O:select power(3,4) value from dual 8112.取随机数
    S:select rand() value
    O:select sys.dbms_random.value(0,1) value from dual;13.取符号
    S:select sign(-8) value -1
    O:select sign(-8) value from dual -1----------三角函数相关14.圆周率
    S:SELECT PI() value 3.1415926535897931
    O:不知道15.sin,cos,tan 参数都以弧度为单位
    例如:select sin(PI()/2) value 得到1(SQLServer)16.Asin,Acos,Atan,Atan2 返回弧度17.弧度角度互换(SQLServer,Oracle不知道)
    DEGREES:弧度-〉角度
    RADIANS:角度-〉弧度---------数值间比较18. 求集合最大值
    S:select max(value) value from
    (select 1 value
    union
    select -2 value
    union
    select 4 value
    union
    select 3 value)aO:select greatest(1,-2,4,3) value from dual19. 求集合最小值
    S:select min(value) value from
    (select 1 value
    union
    select -2 value
    union
    select 4 value
    union
    select 3 value)aO:select least(1,-2,4,3) value from dual20.如何处理null值(F2中的null以10代替)
    S:select F1,IsNull(F2,10) value from Tbl
    O:select F1,nvl(F2,10) value from Tbl
      

  2.   

    --------字符串函数21.求字符序号
    S:select ascii('a') value
    O:select ascii('a') value from dual22.从序号求字符
    S:select char(97) value
    O:select chr(97) value from dual23.连接
    S:select '11'+'22'+'33' value
    O:select CONCAT('11','22')||33 value from dual23.子串位置 --返回3
    S:select CHARINDEX('s','sdsq',2) value
    O:select INSTR('sdsq','s',2) value from dual23.模糊子串的位置 --返回2,参数去掉中间%则返回7
    // 本文转自 C++Builder 研究 - http://www.ccrun.com/article.asp?i=996&d=dwn1rn
    S:select patindex('%d%q%','sdsfasdqe') value
    O:oracle没发现,但是instr可以通过第四个参数控制出现次数
    select INSTR('sdsfasdqe','sd',1,2) value from dual 返回624.求子串
    S:select substring('abcd',2,2) value
    O:select substr('abcd',2,2) value from dual25.子串代替 返回aijklmnef
    S:SELECT STUFF('abcdef', 2, 3, 'ijklmn') value
    O:SELECT Replace('abcdef', 'bcd', 'ijklmn') value from dual26.子串全部替换
    S:Replace
    O:select Translate('fasdbfasegas','fa','我' ) value from dual27.长度
    S:len,datalength
    O:length28.大小写转换 lower,upper29.单词首字母大写
    S:没发现
    O:select INITCAP('abcd dsaf df') value from dual30.左补空格(LPAD的第一个参数为空格则同space函数)
    S:select space(10)+'abcd' value
    O:select LPAD('abcd',14) value from dual31.右补空格(RPAD的第一个参数为空格则同space函数)
    S:select 'abcd'+space(10) value
    O:select RPAD('abcd',14) value from dual32.删除空格
    S:ltrim,rtrim
    O:ltrim,rtrim,trim33. 重复字符串
    S:select REPLICATE('abcd',2) value
    O:没发现34.发音相似性比较(这两个单词返回值一样,发音相同)
    S:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe')
    O:SELECT SOUNDEX ('Smith'), SOUNDEX ('Smythe') from dual
    SQLServer中用SELECT DIFFERENCE('Smithers', 'Smythers') 比较soundex的差
    返回0-4,4为同音,1最高--------------日期函数35.系统时间
    S:select getdate() value
    O:select sysdate value from dual36.前后几日
    直接与整数相加减37.求日期
    S:select convert(char(10),getdate(),20) value
    O:select trunc(sysdate) value from dual
    select to_char(sysdate,'yyyy-mm-dd') value from dual38.求时间
    S:select convert(char(8),getdate(),108) value
    O:select to_char(sysdate,'hh24:mm:ss') value from dual39.取日期时间的其他部分
    S:DATEPART 和 DATENAME 函数 (第一个参数决定)
    O:to_char函数 第二个参数决定参数---------------------------------下表需要补充
    year yy, yyyy
    quarter qq, q (季度)
    month mm, m (m O无效)
    dayofyear dy, y (O表星期)
    day dd, d (d O无效)
    week wk, ww (wk O无效)
    weekday dw (O不清楚)
    Hour hh,hh12,hh24 (hh12,hh24 S无效)
    minute mi, n (n O无效)
    second ss, s (s O无效)
    millisecond ms (O无效)
    ----------------------------------------------40.当月最后一天
    S:不知道
    O:select LAST_DAY(sysdate) value from dual41.本星期的某一天(比如星期日)
    S:不知道
    O:SELECT Next_day(sysdate,7) vaule FROM DUAL;42.字符串转时间
    S:可以直接转或者select cast('2004-09-08'as datetime) value
    O:SELECT To_date('2004-01-05 22:09:38','yyyy-mm-dd hh24-mi-ss') vaule FROM DUAL;43.求两日期某一部分的差(比如秒)
    S:select datediff(ss,getdate(),getdate()+12.3) value
    O:直接用两个日期相减(比如d1-d2=12.3)
    SELECT (d1-d2)*24*60*60 vaule FROM DUAL;44.根据差值求新的日期(比如分钟)
    S:select dateadd(mi,8,getdate()) value
    O:SELECT sysdate+8/60/24 vaule FROM DUAL;45.求不同时区时间
    S:不知道
    O:SELECT New_time(sysdate,'ydt','gmt' ) vaule FROM DUAL;-----时区参数,北京在东8区应该是Ydt-------
    AST ADT 大西洋标准时间
    BST BDT 白令海标准时间
    CST CDT 中部标准时间
    EST EDT 东部标准时间
    GMT 格林尼治标准时间
    HST HDT 阿拉斯加—夏威夷标准时间
    MST MDT 山区标准时间
    NST 纽芬兰标准时间
    PST PDT 太平洋标准时间
    YST YDT YUKON标准时间
      

  3.   

    Oracle支持的字符函数和它们的Microsoft SQL Server等价函数:函数 Oracle Microsoft SQL Server
    把字符转换为ASCII ASCII ASCII
    字串连接 CONCAT (expression + expression)
    把ASCII转换为字符 CHR CHAR
    返回字符串中的开始字符(左起) INSTR CHARINDEX
    把字符转换为小写 LOWER LOWER
    把字符转换为大写 UPPER UPPER
    填充字符串的左边 LPAD N/A
    清除开始的空白 LTRIM LTRIM
    清除尾部的空白 RTRIM RTRIM
    字符串中的起始模式(pattern) INSTR PATINDEX
    多次重复字符串 RPAD REPLICATE
    字符串的语音表示 SOUNDEX SOUNDEX
    重复空格的字串 RPAD SPACE
    从数字数据转换为字符数据 TO_CHAR STR
    子串 SUBSTR SUBSTRING
    替换字符 REPLACE STUFF
    将字串中的每个词首字母大写 INITCAP N/A
    翻译字符串 TRANSLATE N/A
    字符串长度 LENGTH DATELENGTH or LEN
    列表中最大的字符串 GREATEST N/A
    列表中最小的字符串 LEAST N/A
    如果为NULL则转换字串 NVL ISNULL日期函数函数 Oracle Microsoft SQL Server
    日期相加 (date column +/- value) or
    ADD_MONTHS DATEADD
    两个日期的差 (date column +/- value) or
    MONTHS_BETWEEN DATEDIFF
    当前日期和时间 SYSDATE GETDATE()
    一个月的最后一天 LAST_DAY N/A
    时区转换 NEW_TIME N/A
    日期后的第一个周日 NEXT_DAY N/A
    代表日期的字符串 TO_CHAR DATENAME
    代表日期的整数 TO_NUMBER
    (TO_CHAR)) DATEPART
    日期舍入 ROUND CONVERT
    日期截断 TRUNC CONVERT
    字符串转换为日期 TO_DATE CONVERT
    如果为NULL则转换日期 NVL ISNULL转换函数函数 Oracle Microsoft SQL Server
    数字转换为字符 TO_CHAR CONVERT
    字符转换为数字 TO_NUMBER CONVERT
    日期转换为字符 TO_CHAR CONVERT
    字符转换为日期 TO_DATE CONVERT
    16进制转换为2进制 HEX_TO_RAW CONVERT
    2进制转换为16进制 RAW_TO_HEX CONVERT其它行级别的函数函数 Oracle Microsoft SQL Server
    返回第一个非空表达式 DECODE COALESCE
    当前序列值 CURRVAL N/A
    下一个序列值 NEXTVAL N/A
    如果exp1 = exp2, 返回null DECODE NULLIF
    用户登录账号ID数字 UID SUSER_ID
    用户登录名 USER SUSER_NAME
    用户数据库ID数字 UID USER_ID
    用户数据库名 USER USER_NAME
    当前用户 CURRENT_USER CURRENT_USER
    用户环境(audit trail) USERENV N/A
    在CONNECT BY子句中的级别 LEVEL N/A合计函数函数 Oracle Microsoft SQL Server
    Average AVG AVG
    Count COUNT COUNT
    Maximum MAX MAX
    Minimum MIN MIN
    Standard deviation STDDEV STDEV or STDEVP
    Summation SUM SUM
    Variance VARIANCE VAR or VARPOracle还有一个有用的函数EXTRACT,提取并且返回日期时间或时间间隔表达式中特定的时间域:
    EXTRACT(YEAR FROM 日期) 
    ORACLE中日期和时间函数汇总(转载) 
    在oracle中处理日期大全    TO_DATE格式  
    Day:  
    dd number 12  
    dy abbreviated fri  
    day spelled out friday  
    ddspth spelled out, ordinal twelfth  
    Month:  
    mm number 03  
    mon abbreviated mar  
    month spelled out march  
    Year:  
    yy two digits 98  
    yyyy four digits 1998  24小时格式下时间范围为: 0:00:00 - 23:59:59....  
    12小时格式下时间范围为: 1:00:00 - 12:59:59 ....  
    1.  
    日期和字符转换函数用法(to_date,to_char)  2.  
    select to_char( to_date(222,'J'),'Jsp') from dual  显示Two Hundred Twenty-Two  3.  
    求某天是星期几  
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual;  
    星期一  
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  
    monday  
    设置日期语言  
    ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';  
    也可以这样  
    TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')  4.  
    两个日期间的天数  
    select floor(sysdate - to_date('20020405','yyyymmdd')) from dual;  5. 时间为null的用法  
    select id, active_date from table1  
    UNION  
    select 1, TO_DATE(null) from dual;  注意要用TO_DATE(null)  6.  
    a_date between to_date('20011201','yyyymmdd') and to_date('20011231','yyyymmdd')  
    那么12月31号中午12点之后和12月1号的12点之前是不包含在这个范围之内的。  
    所以,当时间需要精确的时候,觉得to_char还是必要的  
    7. 日期格式冲突问题  
    输入的格式要看你安装的ORACLE字符集的类型, 比如: US7ASCII, date格式的类型就是: '01-Jan-01'  
    alter system set NLS_DATE_LANGUAGE = American  
    alter session set NLS_DATE_LANGUAGE = American  
    或者在to_date中写  
    select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  
    注意我这只是举了NLS_DATE_LANGUAGE,当然还有很多,  
    可查看  
    select * from nls_session_parameters  
    select * from V$NLS_PARAMETERS  8.  
    select count(*)  
    from ( select rownum-1 rnum  
    from all_objects  
    where rownum <= to_date('2002-02-28','yyyy-mm-dd') - to_date('2002-  
    02-01','yyyy-mm-dd')+1  
    )  
    where to_char( to_date('2002-02-01','yyyy-mm-dd')+rnum-1, 'D' )  
    not  
    in ( '1', '7' )  查找2002-02-28至2002-02-01间除星期一和七的天数  
    在前后分别调用DBMS_UTILITY.GET_TIME, 让后将结果相减(得到的是1/100秒, 而不是毫秒).  9.  
    select months_between(to_date('01-31-1999','MM-DD-YYYY'),  
    to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;  
    1  select months_between(to_date('02-01-1999','MM-DD-YYYY'),  
    to_date('12-31-1998','MM-DD-YYYY')) "MONTHS" FROM DUAL;  1.03225806451613  
    10. Next_day的用法  
    Next_day(date, day)  Monday-Sunday, for format code DAY  
    Mon-Sun, for format code DY  
    1-7, for format code D  11  
    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;  
    12.  
    获得小时数  SELECT EXTRACT(HOUR FROM TIMESTAMP '2001-02-16 2:38:40') from offer  
    SQL> select sysdate ,to_char(sysdate,'hh') from dual;  SYSDATE TO_CHAR(SYSDATE,'HH')  
    -------------------- ---------------------  
    2003-10-13 19:35:21 07  SQL> select sysdate ,to_char(sysdate,'hh24') from dual;  SYSDATE TO_CHAR(SYSDATE,'HH24')  
    -------------------- -----------------------  
    2003-10-13 19:35:21 19  获取年月日与此类似  
    13.  
    年月日的处理  
    select older_date,  
    newer_date,  
    years,  
    months,  
    abs(  
    trunc(  
    newer_date-  
    add_months( older_date,years*12+months )  
    )  
    ) days  
    from ( select  
    trunc(months_between( newer_date, older_date )/12) YEARS,  
    mod(trunc(months_between( newer_date, older_date )),  
    12 ) MONTHS,  
    newer_date,  
    older_date  
    from ( select hiredate older_date,  
    add_months(hiredate,rownum)+rownum newer_date  
    from emp )  
    )  14.  
    处理月份天数不定的办法  
    select to_char(add_months(last_day(sysdate) +1, -2), 'yyyymmdd'),last_day(sysdate) from dual 
    16.  
    找出今年的天数  
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual  闰年的处理方法  
    to_char( last_day( to_date('02' || :year,'mmyyyy') ), 'dd' )  
    如果是28就不是闰年  17.  
    yyyy与rrrr的区别  
    'YYYY99 TO_C  
    ------- ----  
    yyyy 99 0099  
    rrrr 99 1999  
    yyyy 01 0001  
    rrrr 01 2001  18.不同时区的处理  
    select to_char( NEW_TIME( sysdate, 'GMT','EST'), 'dd/mm/yyyy hh:mi:ss') ,sysdate  
    from dual;  19.  
    5秒钟一个间隔  
    Select TO_DATE(FLOOR(TO_CHAR(sysdate,'SSSSS')/300) * 300,'SSSSS') ,TO_CHAR(sysdate,'SSSSS')  
    from dual  2002-11-1 9:55:00 35786  
    SSSSS表示5位秒数  20.  
    一年的第几天  
    select TO_CHAR(SYSDATE,'DDD'),sysdate from dual  
    310 2002-11-6 10:03:51  21.计算小时,分,秒,毫秒  
    select  
    Days,  
    A,  
    TRUNC(A*24) Hours,  
    TRUNC(A*24*60 - 60*TRUNC(A*24)) Minutes,  
    TRUNC(A*24*60*60 - 60*TRUNC(A*24*60)) Seconds,  
    TRUNC(A*24*60*60*100 - 100*TRUNC(A*24*60*60)) mSeconds  
    from  
    (  
    select  
    trunc(sysdate) Days,  
    sysdate - trunc(sysdate) A  
    from dual  
    )  
    select * from tabname  
    order by decode(mode,'FIFO',1,-1)*to_char(rq,'yyyymmddhh24miss');  //  
    floor((date2-date1) /365) 作为年  
    floor((date2-date1, 365) /30) 作为月  
    mod(mod(date2-date1, 365), 30)作为日.  
    23.next_day函数  
    next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。  
    1 2 3 4 5 6 7  
    日 一 二 三 四 五 六
      

  4.   

    oracle中有很多关于日期的函数在oracle中有很多关于日期的函数,如: 
    1、add_months()用于从一个日期值增加或减少一些月份 
    date_value:=add_months(date_value,number_of_months) 
    例: 
    SQL> select add_months(sysdate,12) "Next Year" from dual; Next Year 
    ---------- 
    13-11月-04 SQL> select add_months(sysdate,112) "Last Year" from dual; Last Year 
    ---------- 
    13-3月 -13 SQL> 2、current_date()返回当前会放时区中的当前日期 
    date_value:=current_date 
    SQL> column sessiontimezone for a15 
    SQL> select sessiontimezone,current_date from dual; SESSIONTIMEZONE CURRENT_DA 
    --------------- ---------- 
    +08:00 13-11月-03 SQL> alter session set time_zone='-11:00' 
       2 / 会话已更改。 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP 
    --------------- ------------------------------------ 
    -11:00 12-11月-03 04.59.13.668000 下午 -11: 
                     00 SQL> 3、current_timestamp()以timestamp with time zone数据类型返回当前会放时区中的当前日期 
    timestamp_with_time_zone_value:=current_timestamp([timestamp_precision]) 
    SQL> column sessiontimezone for a15 
    SQL> column current_timestamp format a36 
    SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP 
    --------------- ------------------------------------ 
    +08:00 13-11月-03 11.56.28.160000 上午 +08: 
                     00 SQL> alter session set time_zone='-11:00' 
       2 / 会话已更改。 SQL> select sessiontimezone,current_timestamp from dual; SESSIONTIMEZONE CURRENT_TIMESTAMP 
    --------------- ------------------------------------ 
    -11:00 12-11月-03 04.58.00.243000 下午 -11: 
                     00 SQL> 4、dbtimezone()返回时区 
    varchar_value:=dbtimezone 
    SQL> select dbtimezone from dual; DBTIME 
    ------ 
    -07:00 SQL> 5、extract()找出日期或间隔值的字段值 
    date_value:=extract(date_field from [datetime_value|interval_value]) 
    SQL> select extract(month from sysdate) "This Month" from dual; This Month 
    ---------- 
             11 SQL> select extract(year from add_months(sysdate,36)) "3 Years Out" from dual; 3 Years Out 
    ----------- 
            2006 SQL> 6、last_day()返回包含了日期参数的月份的最后一天的日期 
    date_value:=last_day(date_value) 
    SQL> select last_day(date'2000-02-01') "Leap Yr?" from dual; Leap Yr? 
    ---------- 
    29-2月 -00 SQL> select last_day(sysdate) "Last day of this month" from dual; Last day o 
    ---------- 
    30-11月-03 SQL> 7、localtimestamp()返回会话中的日期和时间 
    timestamp_value:=localtimestamp 
    SQL> column localtimestamp format a28 
    SQL> select localtimestamp from dual; LOCALTIMESTAMP 
    ---------------------------- 
    13-11月-03 12.09.15.433000 
    下午 SQL> select localtimestamp,current_timestamp from dual; LOCALTIMESTAMP CURRENT_TIMESTAMP 
    ---------------------------- ------------------------------------ 
    13-11月-03 12.09.31.006000 13-11月-03 12.09.31.006000 下午 +08: 
    下午 00 SQL> alter session set time_zone='-11:00'; 会话已更改。 SQL> select localtimestamp,to_char(sysdate,'DD-MM-YYYY HH:MI:SS AM') "SYSDATE" from dual; LOCALTIMESTAMP SYSDATE 
    ---------------------------- ------------------------ 
    12-11月-03 05.11.31.259000 13-11-2003 12:11:31 下午 
    下午 SQL> 8、months_between()判断两个日期之间的月份数量 
    number_value:=months_between(date_value,date_value) 
    SQL> select months_between(sysdate,date'1971-05-18') from dual; MONTHS_BETWEEN(SYSDATE,DATE'1971-05-18') 
    ---------------------------------------- 
                                   389.855143 SQL> select months_between(sysdate,date'2001-01-01') from dual; MONTHS_BETWEEN(SYSDATE,DATE'2001-01-01') 
    ---------------------------------------- 
                                   34.4035409 SQL> 9、next_day()给定一个日期值,返回由第二个参数指出的日子第一次出现在的日期值(应返回相应日子的名称字符串)
    與周相關日期函數1.查询某周的第一天
    select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') last_day
    from (select substr('2004-32', 1, 4) yy, to_number(substr('2004-32', 6)) ww
              from dual)select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d')-6 first_day from dualselect min(v_date) from
       (select (to_date('200201','yyyymm') + rownum) v_date
       from all_tables
       where rownum < 370)
    where to_char(v_date,'yyyy-iw') = '2002-49'2.查询某周的最后一天
    select trunc(decode(ww, 53, to_date(yy || '3112', 'yyyyddmm'), to_date(yy || '-' || to_char(ww * 7), 'yyyy-ddd')), 'd') - 6 first_day
       from (select substr('2004-33', 1, 4) yy, to_number(substr('2004-33', 6)) ww
               from dual)
              
    select trunc(to_date(substr('2003-01',1,5)||to_char((to_number(substr('2003-01',6)))*7),'yyyy-ddd'),'d') last_day from dualselect max(v_date) from
       (select (to_date('200408','yyyymm') + rownum) v_date
       from all_tables
       where rownum < 370)
    where to_char(v_date,'yyyy-iw') = '2004-33'3.查询某周的日期
    select min_date, to_char(min_date,'day') day from
    (select to_date(substr('2004-33',1,4)||'001'+rownum-1,'yyyyddd') min_date 
             from all_tables
       where rownum <= decode(mod(to_number(substr('2004-33',1,4)),4),0,366,365)  
       union   select to_date(substr('2004-33',1,4)-1||
              decode(mod(to_number(substr('2004-33',1,4))-1,4),0,359,358)+rownum,'yyyyddd') min_date 
             from all_tables          
               where rownum <= 7
       union   select to_date(substr('2004-33',1,4)+1||'001'+rownum-1,'yyyyddd') min_date 
             from all_tables          
               where rownum <= 7                       
    )
    where to_char(min_date,'yyyy-iw') ='2004-33'
    oracle中时间运算论坛中常常看到有对oracle中时间运算提问的问题,今天有时间,看了看以前各位兄弟的贴子,整理了一下,并作了个示例,希望会对大家有帮助。 
    首先感谢ern、eric.li及各版主还有热心的兄弟们 内容如下: 
    1、oracle支持对日期进行运算 
    2、日期运算时是以天为单位进行的 
    3、当需要以分秒等更小的单位算值时,按时间进制进行转换即可 
    4、进行时间进制转换时注意加括号(见示例中红色括号),否则会出问题 SQL> alter session set nls_date_format='yyyy-mm-dd hh:mi:ss'; 会话已更改。 SQL> set serverout on 
    SQL> declare 
       2 DateValue date; 
       3 begin 
       4 select sysdate into DateValue from dual; 
       5 dbms_output.put_line('源时间:'||to_char(DateValue)); 
       6 dbms_output.put_line('源时间减1天:'||to_char(DateValue-1)); 
       7 dbms_output.put_line('源时间减1天1小时:'||to_char(DateValue-1-1/24)); 
       8 dbms_output.put_line('源时间减1天1小时1分:'||to_char(DateValue-1-1/24-1/(24*60))); 
       9 dbms_output.put_line('源时间减1天1小时1分1秒:'||to_char(DateValue-1-1/24-1/(24*60)-1/(24*60*6 
    0))); 
    10 end; 
    11 / 
    源时间:2003-12-29 11:53:41 
    源时间减1天:2003-12-28 11:53:41 
    源时间减1天1小时:2003-12-28 10:53:41 
    源时间减1天1小时1分:2003-12-28 10:52:41 
    源时间减1天1小时1分1秒:2003-12-28 10:52:40 PL/SQL 过程已成功完成。