在 Oracle 数据库中,TRUNC()
函数用于 截断数值 或 日期,具体功能取决于它所操作的参数类型。它可以用来去掉数字的小数部分,或者按照指定的日期格式截取日期。它的使用非常常见,尤其是在数据处理和格式化时。
1. TRUNC() 用于数字
当 TRUNC()
函数作用于数值时,它会截断数字的小数部分,而不是四舍五入。
语法:
TRUNC(number, decimal_places)
- number:需要截断的数值。
- decimal_places(可选):指定保留的小数位数。如果没有指定该参数,则默认为 0,即返回整数部分。
示例:
- 去掉小数部分:
SELECT TRUNC(123.456) FROM dual; -- 结果:123
- 保留 2 位小数:
SELECT TRUNC(123.456, 2) FROM dual; -- 结果:123.45
- 保留 1 位小数:
SELECT TRUNC(123.456, 1) FROM dual; -- 结果:123.4
- 去掉整数部分(即负数的截断):
SELECT TRUNC(-123.456) FROM dual; -- 结果:-123
- 截取至个位:
SELECT TRUNC(123.999) FROM dual; -- 结果:123
说明:
TRUNC()
用于数值时,只是截断而不进行四舍五入。即无论小数部分是多少,都直接丢弃。
2. TRUNC() 用于日期
当 TRUNC()
函数作用于日期时,它会将日期截断至指定的单位(如年、月、日等)。
语法:
TRUNC(date, format)
- date:需要截断的日期。
- format(可选):指定截断的粒度,如年、月、日等。常用的格式有:
'YYYY'
:截断至年份。'MM'
:截断至月份。'DD'
:截断至日。'HH'
:截断至小时。'MI'
:截断至分钟。'SS'
:截断至秒。
示例:
- 截断至年份:
SELECT TRUNC(SYSDATE, 'YYYY') FROM dual; -- 结果:2025-01-01 00:00:00
这将当前日期截断至当年的第一天。 - 截断至月份:
SELECT TRUNC(SYSDATE, 'MM') FROM dual; -- 结果:2025-09-01 00:00:00
这将当前日期截断至当月的第一天。 - 截断至日期(默认行为):
SELECT TRUNC(SYSDATE) FROM dual; -- 结果:2025-09-06 00:00:00
默认情况下,TRUNC()
会截断时间部分,保留日期。 - 截断至小时:
SELECT TRUNC(SYSDATE, 'HH') FROM dual; -- 结果:2025-09-06 00:00:00
这将当前日期截断至小时,即去掉分钟和秒。 - 截断至分钟:
SELECT TRUNC(SYSDATE, 'MI') FROM dual; -- 结果:2025-09-06 00:00:00
说明:
- 如果没有指定
format
参数,TRUNC()
函数会默认截断至日期部分,去掉时间部分(小时、分钟、秒)。 - 日期的
TRUNC()
不会改变日期的基本值,只会改变其精度,去除多余的部分。
3. 使用 TRUNC() 函数的场景
- 数字处理:去除数字的小数部分,而不进行四舍五入。例如,报表或财务处理中有时需要处理精度。
- 日期处理:当你需要获取某一日期的某个特定粒度,如获取当前年份的第一天、月初等。
4. 总结
TRUNC()
用于数字时,去掉小数部分,不做四舍五入。TRUNC()
用于日期时,去除多余的时间部分,按指定粒度截断日期。
TRUNC()
是一个非常常用且强大的函数,能够帮助你更灵活地处理数据的格式和精度。
发表回复