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总结)
解决方案 »
- 谁有oracle enterprise linux 啊,帮助发过来个rpm包好吗?
- 请教 ORACLE 一个稍微复杂的SQL文的拼写!
- 菜鸟提问...
- 在哪里可以弄到ORACLE的内部参数?
- 哪位熟悉OracleMigrationWorkbench-ORACLE数据迁移工具的安装使用?
- 大量删除数据后,Oracle性能下降
- oracle事务中多条sql处理一条记录时。。。。
- 在ORACLE数据库中如何随机生成10万个连续的日期时间?
- #查询时大小写问题?
- oracle9ias 如何配置使http服务起来?
- oracle客户端连接问题(在线等待,马上节分)
- 我想把BLOB保存为一个服务器端问题, 如何进行编码 ?
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;
(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;
修改:
UP_NEW_REP_DAILY(tempdate,tempdateend);试试吧