mysql的truncate函数是用来按照指定精度对数值或者日期时间数据进行截断的内置函数,它不会执行四舍五入操作,只会直接舍弃指定精度之后的内容,在处理数据精度控制的需求时非常实用。

truncate函数基本语法
truncate函数的语法结构分为两种场景,分别对应数值处理和日期时间处理。
数值截断语法
处理数值类型数据时,语法如下:
TRUNCATE(X, D)
其中X是要处理的数值表达式,D是指定的精度,取值为整数。当D为正数时,表示保留小数点后D位;当D为0时,保留整数部分;当D为负数时,表示对整数部分的左侧进行截断,用0填充。
日期时间截断语法
mysql 5.7及以上版本支持对日期时间类型数据进行截断,语法如下:
TRUNCATE(date_expression, unit)
其中date_expression是要处理的日期时间表达式,unit是指定的截断单位,可选值包括YEAR、QUARTER、MONTH、DAY、HOUR、MINUTE、SECOND等。
数值截断使用示例
下面通过具体的sql示例展示数值截断的效果。
保留正小数场景
-- 保留小数点后2位,结果为3.14 SELECT TRUNCATE(3.1415926, 2); -- 保留小数点后3位,结果为3.141 SELECT TRUNCATE(3.1415926, 3);
保留整数场景
-- 保留整数部分,结果为3 SELECT TRUNCATE(3.1415926, 0); -- 负数的情况,结果为-3,不会变成-4 SELECT TRUNCATE(-3.1415926, 0);
截断整数部分左侧场景
-- 截断到十位,结果为320 SELECT TRUNCATE(321.45, -1); -- 截断到百位,结果为300 SELECT TRUNCATE(321.45, -2); -- 负数的情况,结果为-300 SELECT TRUNCATE(-321.45, -2);
日期时间截断使用示例
日期时间的截断可以按照指定的时间单位,将更小的时间单位重置为初始值。
-- 截断到年份,结果为2024-01-01 00:00:00
SELECT TRUNCATE('2024-05-20 14:30:25', 'YEAR');
-- 截断到月份,结果为2024-05-01 00:00:00
SELECT TRUNCATE('2024-05-20 14:30:25', 'MONTH');
-- 截断到天,结果为2024-05-20 00:00:00
SELECT TRUNCATE('2024-05-20 14:30:25', 'DAY');
-- 截断到小时,结果为2024-05-20 14:00:00
SELECT TRUNCATE('2024-05-20 14:30:25', 'HOUR');
truncate和其他函数的区别
很多开发者会混淆truncate和round、floor函数的功能,三者的区别如下:
| 函数 | 功能说明 | 示例(输入3.6) |
|---|---|---|
| TRUNCATE | 直接截断指定精度后的内容,不做四舍五入 | TRUNCATE(3.6,0)结果为3 |
| ROUND | 按照四舍五入规则处理精度 | ROUND(3.6,0)结果为4 |
| FLOOR | 返回不大于输入值的最大整数 | FLOOR(3.6)结果为3 |
使用注意事项
- truncate函数处理数值时,不会改变数值的正负属性,负数截断后依然是负数。
- 日期时间截断功能仅在mysql 5.7及以上版本支持,低版本使用会报错。
- 如果D参数或者unit单位不合法,函数会返回NULL值。
- truncate函数和delete、drop语句中的TRUNCATE TABLE语句没有任何关系,不要混淆使用场景。
mysqltruncate函数数值截断日期截断数据精度控制修改时间:2026-06-24 08:54:32