《oracle开发-日期截取及四舍五入》由会员分享,可在线阅读,更多相关《oracle开发-日期截取及四舍五入(2页珍藏版)》请在金锄头文库上搜索。
1、Oracle日期截取及四舍五入一、Oracle中的Round和Trunc:如同对数字进行四舍五入和按位截取一样,Oracle对时间日期也提供了这两种功能。但比起对数字进行四舍五入和截取比较复杂:这是因为时间日期是有格式的。下面看看这两个函数的定义和用途:ROUND(date , format)TRUNC(date , format)Round函数对日期进行“四舍五入”,Trunc函数对日期进行截取。如果不指定格式的话,Round会返回一个最接近date参数的日期,而Trunc函数只会简单的截取时分秒部分,返回年月日部分。二、Round和Trunc函数示例: SQL select to_char
2、(sysdate, yyyy-mm-ddhh24:mi:ss )now_date, 2 to_char( Round (sysdate), yyyy-mm-ddhh24:mi:ss )round_date, 3 to_char(Trunc(sysdate), yyyy-mm-ddhh24:mi:ss )trunc_date 4 from dual;NOW_DATEROUND_DATETRUNC_DATE-2008 - 06 - 30 14 : 52 : 13 2008 - 07 - 01 00 : 00 : 00 2008 - 06 - 30 00 : 00 : 00 由于没有指定round和
3、trunc函数的格式,所以Oracle默认采用了按日期时间的格式,该例子中当前的时间是下午 14:52分,已经超过了12:00 AM这个中界线,所以Round返回07-01日而非06-30日。而Trunc不管三七二十一直接截取前面日期部分返回。另外一个值得注意的地方是这两个函数返回的时分秒都是00:00:00,即一天的开始时间(对于12小时制的返回的是12:00:00 AM)。三、指定格式的Round和Trunc函数示例:如果对Round函数和Trunc函数指定了格式,事情就变得有点复杂了,不过核心思想还是不变:Round是四舍五入,Trunc是截取。举个例子来说,假如以年为格式,则现在Ora
4、cle的判断是基于年来判断,超过一年的一半(即6月30日),Round函数则返回下一年了,Trunc函数依然返回当前年。 SQL select sysdateNowdate, 2 Round (sysdate, yyyy )Round_year, 3 Trunc(sysdate, yyyy )Trunc_year 4 from dual;NowdateROUND_YEARTRUNC_YEAR- - 30 - 6月 - 08 01 - 1月 - 08 01 - 1月 - 08 关于这两个函数可用的格式非常多,但日常应用中用得比较多的基本上就这几个,以Round函数为例: select Round
5、 (sysdate, Q )Rnd_Q, Round (sysdate, Month )Rnd_Month, Round (sysdate, WW )Rnd_Week, Round (sysdate, W )Rnd_Week_again, Round (sysdate, DDD )Rnd_day, Round (sysdate, DD )Rnd_day_again, Round (sysdate, DAY )Rnd_day_of_week, Round (sysdate, D )Rnd_day_of_week_again, Round (sysdate, HH12 )Rnd_hour_12, Round (sysdate, HH24 )Rnd_hour_24, Round (sysdate, MI )Rnd_minute from dual