- 类别:
:doc:`/sql-reference/functions-numeric`(舍入和截断)
TRUNCATE、TRUNC¶
将输入表达式向下舍入到最接近于(或等于)零的值。根据您指定为标度参数的值,转换可以删除:
小数点后的所有数字,生成一个整数值。这是适用于数值的 TRUNC 的默认且最常见的用法。
小数点后的一些有效数字,生成一个不太精确的值。
小数点后的所有有效数字和小数点左侧的一些有效数字,生成的值是 10、100 或其他 10 的幂次方倍数。
TRUNCATE 和 TRUNC 函数为同义函数。
备注
TRUNC 是重载函数。它还可以用于日期/时间值,以便 将日期、时间及时间戳截断 到指定的部分。适用于数值的 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 函数。有关截断日期、时间和时间戳的示例,请参阅 TRUNC 的日期/时间形式。
该示例使用了此示例表中的数据。该表包含两个不同的十进制数 -975.975 和 135.135,以及用于 TRUNC 函数的标度参数的不同值。
CREATE TABLE numeric_trunc_demo (n FLOAT, scale INTEGER);
INSERT INTO numeric_trunc_demo (n, scale) VALUES
(-975.975, -1), (-975.975, 0), (-975.975, 2),
( 135.135, -2), ( 135.135, 0), ( 135.135, 1),
( 135.135, 3), ( 135.135, 50), ( 135.135, NULL);
当不指定标度参数时,TRUNC 对于数值参数的默认行为是返回与参数相等的整数值,或者更接近零的值。指定标度参数为 0 也会执行同样的操作。
SELECT DISTINCT n, TRUNCATE(n)
FROM numeric_trunc_demo ORDER BY n;
+----------+-------------+
| N | TRUNCATE(N) |
|----------+-------------|
| -975.975 | -975 |
| 135.135 | 135 |
+----------+-------------+
以下示例显示了对正数和负数应用零标度参数、正标度参数或负标度参数时,调用 TRUNC 函数的结果。
指定零标度参数将会删除小数点后的所有数字,生成一个整数值。
指定正标度参数将会在小数点后保留指定的有效位数。
指定负标度参数会将小数点左侧的相应位数的数字变为零。
指定大于 +38 或小于 -38 的标度与指定 +38 或 -38 相同。
SELECT n, scale, TRUNC(n, scale)
FROM numeric_trunc_demo 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 |
+----------+-------+-----------------+