Oracle:trunc()函数简介

一:功能描述

  用于截取时间或者数值,返回指定的值。

二:语法

(1)日期处理:     TRUNC(date,[fmt])    date 为必要参数,是输入的一个date日期值   fmt 参数可忽略,是日期格式,缺省时表示指定日期的0点。 (2)数值处理:     TRUNC(number,[decimals])   number 为必要参数,是输入的一个number数值   decimals 参数可忽略,是要截取的位数,缺省时表示截掉小数点后边的值。

三:栗子

(1)处理日期:

--sysdate和trunc(sysdate)是不一样的 sysdate在当天的零时零分零秒等于trunc(sysdate)
select to_char(sysdate, yyyy-mm-dd hh24:mi:ss),
       to_char(trunc(sysdate), yyyy-mm-dd hh24:mi:ss)
  from dual t;

--年
select trunc(sysdate, yy) "当年第一天" from dual;
select trunc(sysdate, yyyy) "当年第一天" from dual;
select trunc(sysdate, year) "当年第一天" from dual;
--季度
select trunc(sysdate, q) "当前季度的第一天" from dual;
select trunc(add_months(sysdate,3), Q) -1/24 "这个季度最后一天23点" from dual; 
--月
select trunc(sysdate, mm) "当月第一天" from dual;
select trunc(sysdate, month) "当月第一天" from dual;
select trunc(last_day(sysdate)+1) "下个月第一天的0点" from dual;
--周
select trunc(sysdate, d) "本周的第一天,周日起" from dual; 
select trunc(sysdate,day) "本周的第一天,周日起" from dual; 
select next_day(TRUNC(SYSDATE ), TUESDAY ) + 12/24 "下个星期二中午12点" from dual;
select TRUNC(LEAST(NEXT_DAY(SYSDATE, SATURDAY), NEXT_DAY(SYSDATE, SUNDAY))) + (6*60+10)/(24*60) "下个周六日早上6点10分" from dual;
--天
select trunc(sysdate+1) "今晚12点" from dual;
select trunc(sysdate+1) + (8*60+30)/(24*60) "明天早上8点30分" from dual;
--时
select trunc(sysdate, hh)"当前小时" from dual;  
select trunc(sysdate, hh24) "当前小时" from dual; 
--分
select trunc(sysdate, mi) "当前分钟" from dual;
select trunc(sysdate,mi) + 10/ (24*60) "10分钟后的时间"from dual; 
--秒
select sysdate + 10/(24 * 60 * 60) "10秒钟后" from dual;--trunc没有精确到秒的精度

 (2)处理数值:

--123.56,将小数点右边指定位数后面的截去; 
select trunc(123.567,2) from dual;
--100,第二个参数可以为负数,表示将小数点左边指定位数后面的部分截去,即均以0记;
select trunc(123.567,-2) from dual;
--123,默认截去小数点后面的部分;
select trunc(123.567) from dual;

              底线 


经验分享 程序员 微信小程序 职场和发展