- 类别:
:doc:`/sql-reference/functions-numeric`(舍入和截断)
TRUNCATE、TRUNC¶
将输入表达式向下舍入到更接近于零的最接近(或相等)的整数,或者四舍五入到具有指定小数位数、最接近的相等或更小的值。
这些函数为同义函数。
备注
TRUNC 已重载;它也可用作日期/时间函数,将日期、时间和时间戳截断 到指定部分。
语法¶
TRUNCATE( <input_expr> [ , <scale_expr> ] )
TRUNC( <input_expr> [ , <scale_expr> ] )
实参¶
input_expr
要执行操作的值或表达式。数据类型应为数值数据类型之一,例如 FLOAT 或 NUMBER。
scale_expr
输出应包含在小数点后的位数。表达式的计算结果应为 -38 到 +38 之间的整数。
默认
scale_expr
值为零,这意味着该函数会移除小数点后的所有数字。有关负小数位数的信息,请参阅下面的使用说明。
返回¶
返回值的数据类型是 NUMBER(精确度、范围)。
如果输入大小大于或等于零,则输出范围通常与输入范围匹配。
如果输入大小为负,则输出范围为 0。
- 例如:
TRUNCATE(3.14, 1) 返回的数据类型为 NUMBER(4, 1)。
TRUNCATE(3.14, 0) 返回的数据类型为 NUMBER(4, 0)。
TRUNCATE(33.33, -1) 返回的数据类型为 NUMBER(5, 0)。
如果大小为零,则该值实际上是一个整数。
使用说明¶
如果
scale_expr
为负数,则指定需要调整数字的小数点 之前 的位数。例如,如果大小为 -2,则结果是 100 的倍数。如果
scale_expr
大于输入表达式大小,则该函数不生效。如果
input_expr
或scale_expr
为 NULL,则结果为 NULL。截断是向 0 执行的,而不是向较小的数字执行截断。例如,TRUNCATE(-9.6) 的结果是 -9,而不是 -10。
示例¶
以下示例演示了 TRUNC
函数。
SELECT DISTINCT n, TRUNCATE(n) FROM test_1 ORDER BY n; +----------+-------------+ | N | TRUNCATE(N) | |----------+-------------| | -975.975 | -975 | | 135.135 | 135 | +----------+-------------+SELECT n, scale, TRUNC(n, scale) FROM test_1 ORDER BY n, scale; +----------+-------+-----------------+ | N | SCALE | TRUNC(N, SCALE) | |----------+-------+-----------------| | -975.975 | -1 | -970 | | -975.975 | 0 | -975 | | -975.975 | 2 | -975.97 | | 135.135 | -2 | 100 | | 135.135 | 0 | 135 | | 135.135 | 1 | 135.1 | | 135.135 | 3 | 135.135 | | 135.135 | 50 | 135.135 | | 135.135 | NULL | NULL | +----------+-------+-----------------+