trunc(n,m) n表示原始数据,m表示格式数据。
当n位number型数据时,其作用为截取n保留至小数点后m位。
select trunc(122.1111,1),trunc(122.1111,2),trunc(122.1111,3) from dual;
TRUNC(122.1111,1) TRUNC(122.1111,2) TRUNC(122.1111,3)
----------------- ----------------- -----------------
122.1            122.11           122.111
select trunc(122.1111,-1),trunc(122.1111,-2),trunc(122.1111,-3) from dual;
TRUNC(122.1111,-1) TRUNC(122.1111,-2) TRUNC(122.1111,-3)
------------------ ------------------ ------------------
               120                100                  0
当n为日期型数据时,此时m为格式符。
SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR') "New Year" FROM DUAL;
New Year
-------------------
2003-01-01 00:00:00
select trunc(sysdate, 'D')-3  j from dual;  --当前日期的上一周的星期四的日期
J
-------------------
2003-07-10 00:00:00
select trunc(sysdate, 'y')-3 mon from dual; --去年倒数第三天日期
MON
-------------------
2002-12-29 00:00:00
select trunc(sysdate, 'Q')-3 mon from dual; --上一季度第三天日期
MON
-------------------
2003-06-28 00:00:00
select trunc(sysdate, 'W') mon from dual;   --本月的第一个周末
MON
-------------------
2003-07-05 00:00:00
select trunc(sysdate, 'J')-3 mon from dual; --呵呵,今天的前三天。
MON
-------------------
2003-07-11 00:00:00
select trunc(sysdate, 'HH')  from dual;  --截取到小时
TRUNC(SYSDATE,'HH')
-------------------
2003-07-14 14:00:00
select trunc(sysdate, 'MI')  from dual;  --截取到分钟
TRUNC(SYSDATE,'MI')
-------------------
2003-07-14 14:57:00(转载需要什么hammer_shi总结)

解决方案 »

  1.   

    主要有两个函数比较常用:
    to_char和to_date
    去当前日期时间:
    select to_char(sysdate,'yyyymmddhhmiss') from dual;
    select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;
    取一个小时前的时间
    select to_char(sysdate-1/24,'yyyymmdd') from dual;将字符串转成日期
    select to_date('20030405','yyyymmdd') from dual;
      

  2.   

    清高手们改一下这个过程,老出错。最后一行可以吗?
    (starttime in varchar2(10),
        endtime in varchar2(10)) is
      declare tempstart date;
              tempend   date;
              tempdate date;
              tempdateend date;
      begin
      tempstart:=TO_DATE(startime,'yyyymmdd');
      tempend=TO_DATE(endtime,'yyyymmdd');
       if(tempstart>tempend) then
        begin
        tempend:= tempstart+1;
        tempdate:=tempstart;
        end;
       end if;
        while (tempdate<tempend) loop
          tempdateend:=tempdate+1;
          exec UP_NEW_REP_DAILY tempdate,tempdateend;
          tempdate:=tempdate+1;
        end loop;
        --select tempstart ,tempend;
         end;
      

  3.   

    exec UP_NEW_REP_DAILY tempdate,tempdateend;
    修改:
    UP_NEW_REP_DAILY(tempdate,tempdateend);试试吧