trunc(date,fmt)的应用实例

    trunc函数在日期比较和事务执行中是经常要使用到的一个函数,以前使用比较多的是忽略参数fmt的应用,这时默认返回的是距离当前最近的上一个整数日期.比如语句select trunc(sysdate) from dual;就可以返回当天的整数时间.

    日前系统中有个业务处理,需要定时每小时执行一次预定义事务,开始时定义下一个执行时间为 sysdate +1/24,后来发现下一次的执行时间,oracle是在事务执行完成之后才进行计算的.本来我设想是在每个整点执行过程,结果由于事务需要执行1分钟,这样每次执行时间间隔就变成了一个小时零一分钟,顺延.

    有点不爽,于是找了下资料,发现原来我们还可以使用带fmt参数的trunc函数解决这个问题,于是将执行时间修改为trunc(sysdate,'HH')+1/24于是问题解决.

    下面顺便整理一下oracle文档中关于这个函数的解释.

-----------------------------------------------------------------------

TRUNC (date)

Syntax

trunc_date::=

    The TRUNC (date) function returns date with the time portion of the day truncated to the unit specified by the format model fmt. The value returned is always of datatype DATE, even if you specify a different datetime datatype for date. If you omit fmt, then date is truncated to the nearest day.

    (个人翻译,不保证准确性:) trunc(date)函数可以根据指定的fmt参数返回一个格式化的日期,并总是返回日期类型数据,如果忽略fmt参数,则默认返回格式化到天的日期类型.

trunc函数的参数Fmt   

参数     实例及说明

CC,SCC

            取整当前时间所在年份到前两位,然后加一.比如当前年份为2008,那么取整前两位后得到2000,然后加1得到2001.

SELECT trunc(to_date('20080702 08:05:21 ','YYYYMMDD HH24:MI:SS'),'CC') FROM dual;

2001-01-01

-------------------------

SYYYY,YYYY,YEAR,SYEAR,YYY,YY,Y  

格式化日期到日期所在年份

SELECT trunc(to_date('20080702 08:05:21 ','YYYYMMDD HH24:MI:SS'),'YYYY') FROM dual;

2008-01-01

----------------------------

IYYY,IY,IYI      

去年年底         

SELECT trunc(to_date('20080702 08:05:21 ','YYYYMMDD HH24:MI:SS'),'IY') FROM dual;;

2007-12-31

----------------------------

Q          给定日期所在季度的第一天

SELECT trunc(to_date('20080702 08:05:21 ','YYYYMMDD HH24:MI:SS'),'Q') FROM dual;

2008-07-01

----------------------------

MONTH,MON,MM,RM

给定日期所在月份的第一天

SELECT trunc(to_date('20080702 08:05:21 ','YYYYMMDD HH24:MI:SS'),'MONTH') FROM dual;

2008-7-1

----------------------------

WW     

给定日期所在星期的第一天,也就是当周的周日

SELECT trunc(to_date('20081010 08:05:21 ','YYYYMMDD HH24:MI:SS'),'WW') FROM dual;

2008-10-7

----------------------------

IW        Same day of the week as the first day of the ISO year

----------------------------

W         Same day of the week as the first day of the month

----------------------------

DDD,DD,J,      

Day

SELECT trunc(to_date('20081010 08:05:21 ','YYYYMMDD HH24:MI:SS'),'DD') FROM dual;

2008-10-10

----------------------------

DAY,DY,D        

Starting day of the week

------------------------------

HH,HH12,HH24 

Hour

SELECT trunc(to_date('20081010 08:05:21 ','YYYYMMDD HH24:MI:SS'),'HH24') FROM dual;

2008-10-10 8:00:00

----------------------------

MI        Minute

SELECT trunc(to_date('20081010 08:05:21 ','YYYYMMDD HH24:MI:SS'),'MI') FROM dual;

2008-10-10 8:05:00

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值