- 类别:
TO_DECIMAL、TO_NUMBER、TO_NUMERIC¶
将输入表达式转换为定点数。对于 NULL 输入,输出为 NULL。
这些函数为同义函数。
语法¶
实参¶
必填:
expr数字、字符或变体类型的表达式。
可选:
format用于解析输入
expr和返回的 SQL 格式模型。有关更多信息,请参阅 SQL 格式模型。precision生成的数字中十进制位数的最大数目;从 1 到 38。在 Snowflake 中,不使用精度来确定存储数字所需的字节数,并且对效率没有任何影响,因此默认值为最大值 (38)。
scale小数十进制位数(从 0 到
precision- 1)。0 表示没有小数位数(即整数)。默认小数位数为 0。
返回¶
The function returns a value of type NUMBER with the following defaults:
如果未指定
precision,则默认为 38。如果未指定
scale,则默认为 0。
对于 NULL 输入,结果为 NULL。
使用说明¶
对于定点数:
具有不同小数位数的数字通过向右添加零(如果需要增加小数位数)或通过舍入(如果小数位数需要减小)来减少小数位数的方式进行转换。
请注意,将定点数转换为增加小数位数的定点数可能会失败。
对于浮点数:
如果数字在给定小数位数的可表示范围内,则进行转换。
二进制和十进制小数之间的转换并不精确。这可能会导致缺乏精度或超出范围错误。
无穷大和 NaN (非数字)的值会导致转换错误。
字符串转换为十进制数、整数、小数或浮点数。
对于小数输入,推导出的精度为点后的位数。
对于浮点输入,允许省略尾数或指数,并解释为 0。因此,
E解析为 0。
对于 VARIANT 输入:
如果变体包含定点数值或浮点数值,则执行相应的数值转换。
如果变体包含字符串,则执行字符串转换。
如果变体包含布尔值,则结果为 0 或 1(相应对应于 False 和 True)。
如果变体包含 JSON
null值,则输出为 NULL。
示例¶
创建一个带有 VARCHAR 列的表,然后从表中检索字符串值,并将这些值传递给具有不同 precision 和 scale 值的 TO_NUMBER 函数。
该查询会返回以下输出:
尝试使用 TO_NUMBER 函数返回一个数字,其 precision 为 10,小数位数为 9。
在 precision 实参设置为 10 的情况下,结果中的最大十进制位数为 10。由于表中的两个值在小数点之前都有两位数,并且 scale 设置为 9,查询将返回错误,因为结果会返回 11 位数。
在查询中将不同的 格式元素 与 TO_DECIMAL 函数配合使用:
该查询会返回以下输出:
输出显示 TM9 最小文本格式元素根据指定的小数位数,精确打印小数部分的位数。有关更多信息,请参阅 最小文本数字格式。
转换使用逗号分隔数字组的数字:
该查询会返回以下输出:
转换使用逗号分隔数字组的货币值:
该查询会返回以下输出:
将 X 格式元素 与 TO_DECIMAL 函数配合使用,将十六进制值转换为十进制值:
该查询会返回以下输出:
格式元素中的位数必须大于或等于表达式中的位数。例如,尝试运行以下查询:
查询会返回错误: