Oracle:trunc()函数简介
⼀:功能描述
  ⽤于截取时间或者数值,返回指定的值。
⼆:语法
(1)⽇期处理:
    TRUNC(date,[fmt])
  date 为必要参数,是输⼊的⼀个date⽇期值
  fmt 参数可忽略,是⽇期格式,缺省时表⽰指定⽇期的0点。
(2)数值处理:
    TRUNC(number,[decimals])
  number 为必要参数,是输⼊的⼀个number数值
  decimals 参数可忽略,是要截取的位数,缺省时表⽰截掉⼩数点后边的值。
三:栗⼦
(1)处理⽇期:
oracle decimal类型--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;