Oracle的trunc()函数用法

TRUNC()函数分两种


1.TRUNC(for dates) 
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date 一个日期值
fmt 日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
下面是该函数的使用情况:
select trunc(sysdate,'mm') from dual --2007-1-1 当月第一天
select trunc(sysdate,'yyyy') from dual --2007-1-1 当年第一天
select trunc(sysdate,'dd') from dual --2007-1-15 当天
select trunc(sysdate,'day') from dual --2007-1-14 本周第一天
select trunc(sysdate) from dual --2007-1-15 当天

 

 

###将下面的复制到plsql的SQL窗口,如下:

select trunc(sysdate),--2011-8-30 ,截取年-月-日,忽略时分秒
       trunc(sysdate, 'yyyy'), --2011-1-1 ,截取当年第一天 
       trunc(sysdate, 'mm'),  --2011-8-1 ,截取当月第一天
       trunc(sysdate, 'day'), --2011-8-28,截取本周第一天
       trunc(sysdate, 'dd'),--2011-8-30 ,截取当天 (等效于不加条件)
       trunc(sysdate, 'hh'), --2011-8-30 17:00:00 ,截取年-月-日 时(分、秒不取)
       trunc(sysdate, 'mi'), --2011-8-30 17:19:00 ,截取年-月-日 时:分 (秒不取)
       sysdate --2011-8-30 17:19:15 ,系统默认时间格式
from dual;

 

比较下面三个的不同:
select last_day(sysdate)+2 from dual; --2007-2-2 19:07:52
select (last_day(sysdate)+2)+10/24 from dual; --2007-2-3 5:07:18
select trunc(last_day(sysdate)+2)+10/24 from dual --2007-2-2 10:00:00


2.TRUNC(for number)

 

##trunc是取整函数,扩展可用做舍去函数

如:trunc(12.354),返回值12
trunc(12.354,1),返回值12.3
trunc(12.354,-1),返回值10
与rounddown()使用基本一致


TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下
TRUNC(number[,decimals])
其中:
number 待做截取处理的数值
decimals 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。

 

 

============================================================================

 

【赛迪网-IT技术报道】

1:取得当前日期是本月的第几周


SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual;

 

TO_CHAR(SYSDATE,'YY

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

20030327 4 18:16:09

 

SQL> select to_char(sysdate,'W') from dual;

 

T

-

4


2:取得当前日期是一个星期中的第几天,注意星期日是第一天


SQL> select sysdate,to_char(sysdate,'D') from dual;

 

SYSDATE T

--------- -

27-MAR-03 5

 

类似:


select to_char(sysdate,'yyyy') from dual; --年

select to_char(sysdate,'Q' from dual; --季

select to_char(sysdate,'mm') from dual; --月

select to_char(sysdate,'dd') from dual; --日

ddd 年中的第几天

WW 年中的第几个星期

W 该月中第几个星期

D 周中的星期几

hh 小时(12)

hh24 小时(24)

Mi 分

ss 秒

3:取当前日期是星期几中文显示:


SQL> select to_char(sysdate,'day') from dual;

 

TO_CHAR(SYSDATE,'DAY')

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

星期四

 

4:如果一个表在一个date类型的字段上面建立了索引,如何使用


alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'

 

5: 得到当前的日期


select sysdate from dual;

 

6: 得到当天凌晨0点0分0秒的日期


select trunc(sysdate) from dual;

 

-- 得到这天的最后一秒

select trunc(sysdate) + 0.99999 from dual;

 

-- 得到小时的具体数值

select trunc(sysdate) + 1/24 from dual;

 

select trunc(sysdate) + 7/24 from dual;

 

7.得到明天凌晨0点0分0秒的日期


select trunc(sysdate+1) from dual;

 

select trunc(sysdate)+1 from dual;

 

 

8: 本月一日的日期


select trunc(sysdate,'mm') from dual;

 


9:得到下月一日的日期


select trunc(add_months(sysdate,1),'mm') from dual;

 

10:返回当前月的最后一天?


select last_day(sysdate) from dual;

select last_day(trunc(sysdate)) from dual;

select trunc(last_day(sysdate)) from dual;

select trunc(add_months(sysdate,1),'mm') - 1 from dual;

 


11: 得到一年的每一天


select trunc(sysdate,'yyyy')+ rn -1 date0

from

(select rownum rn from all_objects

where rownum<366);

 


12:今天是今年的第N天


SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;

 

13:如何在给现有的日期加上2年


select add_months(sysdate,24) from dual;

 

14:判断某一日子所在年分是否为润年


select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;

 

15:判断两年后是否为润年


select decode(to_char(last_day(trunc(add_months(sysdate,24),'y')+31),

'dd'),'29','闰年','平年') from dual;

 


16:得到日期的季度


select ceil(to_number(to_char(sysdate,'mm'))/3) from dual;

 

select to_char(sysdate, 'Q') from dual;

 

 

 

你可能感兴趣的:(Oracle的trunc())