TRUNC日期、时间
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date/datetime[,fmt])
其中:
date/datetime 是日期或者日期时间值
fmt 日期格式字符串
对于DATE类型
格式字符串 | 对返回值的影响 | 示例 | 结果 |
---|---|---|---|
‘YEAR’ | 截断到该年之初。month 和 day 值都为 01 | TRUNC(DATE(‘2020-05-12’), ‘YEAR’) | 2020-01-01 |
‘MONTH’ | 截断到该月之初。day 值为 01 | TRUNC(DATE(‘2020-05-12’), ‘MONTH’) | 2020-05-01 |
‘DD’ | 返回 date 参数的 DATE 值 | TRUNC(DATE(‘2020-05-12’), ‘DD’) | 2020-05-12 |
‘DAY’ | 返回当年星期的第一天(星期日)的日期 | TRUNC(DATE(‘2020-05-12’), ‘DAY’) | 2020-05-10 |
返回 date 参数对应的int值,等同date::int | TRUNC(DATE(‘2020-05-12’)) | 43962 |
对于DATETIME类型
格式字符串 | 对返回值的影响 | 示例 | 结果 |
---|---|---|---|
‘YEAR’ | 截断到该年之初。month、day、hour 和 minute 值截断到 01-01 00:00 | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND, ‘YEAR’) | 2020-01-01 00:00:00 |
‘MONTH’ | 截断到该月的第一天之初。hour 和 minute 值截断到 00:00 | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND, ‘MONTH’) | 2020-05-01 00:00:00 |
‘DD’ | 截断到同一天之初(00:00 = 午夜) | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND, ‘DD’) | 2020-05-12 00:00:00 |
‘DAY’ | 返回当年星期的第一天(星期日)的午夜 | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND, ‘DAY’) | 2020-05-10 00:00:00 |
‘HH’ | 截断到该小时之初。minute 值截断为零 | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND, ‘HH’) | 2020-05-12 16:00:00 |
‘MI’ | 截断到最近的分钟之初。对于所有这些格式字符串,丢弃小于 minute 的时间单位 | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND, ‘MI’) | 2020-05-12 16:15:00 |
同等’DD’ | TRUNC( DATETIME(2020-05-12 16:15:10) YEAR to SECOND) | 2020-05-12 00:00:00 |
TRUNC数值
TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下
TRUNC(number[,factor])
其中:
number 待做截取处理的数值
factor 指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
下面是该函数的使用情况:
TRUNC(31.4159, 3) = 31.415
TRUNC(31.4159) = 31
TRUNC(31.4159, -1) = 30
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。与取整类似,比如参数为1即取整到十分位,如果是-1,则是取整到十位,以此类推。
示例:
-- 今天2020-05-12是当年的第几天
SELECT DATE('2020-05-12') - TRUNC(DATE('2020-05-12'), 'YEAR') FROM DUAL;
结果:132
-- 本周一是哪天(星期天 + 1天)
SELECT TRUNC(DATE('2020-05-12'), 'DAY') + 1 FROM DUAL;
结果:2020-05-11
-- 本周是今年第几周(根据实际需要选择使用CEIL还是TRUNC)
SELECT CEIL((DATE('2020-05-12') - TRUNC(TRUNC(DATE('2020-05-12'), 'YEAR'), 'DAY'))/7) FROM DUAL;
结果:20