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;