类别:

:doc:`/sql-reference/functions-numeric`(舍入和截断)

TRUNCATE、TRUNC

将输入表达式向下舍入到更接近于零的最接近(或相等)的整数,或者四舍五入到具有指定小数位数、最接近的相等或更小的值。

这些函数为同义函数。

备注

TRUNC 已重载;它也可用作日期/时间函数,将日期、时间和时间戳截断 到指定部分。

另请参阅:

CEILFLOORROUND

语法

TRUNCATE( <input_expr> [ , <scale_expr> ] )

TRUNC( <input_expr> [ , <scale_expr> ] )
Copy

实参

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_exprscale_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 |
+----------+-------------+
Copy
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 |
+----------+-------+-----------------+
Copy
语言: 中文