TEXT_TO_NUMERIC_ALT - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

TEXT_TO_NUMERIC_ALT

TEXT_TO_NUMERIC_ALT 执行一种 Teradata 类的转换操作,以将字符串转换为数字数据格式。

Syntax

TEXT_TO_NUMERIC_ALT (expression [, 'format'] [, precision, scale])

Arguments

expression

计算结果为一个或多个 CHAR 或 VARCHAR 值的表达式,如列名称或文本。转换 null 值将返回 null。空白或空字符串将转换为 0。

format

一个字符串文本,用于定义输入表达式的格式。有关更多信息,请参阅数字数据的 Teradata 类格式字符

精度

数字结果中的位数。默认值为 38。

小数位数

数字结果中小数点右侧的位数。默认值为 0。

返回类型

TEXT_TO_NUMERIC_ALT 返回一个 DECIMAL 数。

如果转换为您指定的 format 短语不成功,Amazon Redshift 将返回一个错误。

Amazon Redshift 使用您在 precision(精度)选项中为该类型指定的最高精度将输入 expression 字符串转换为数字类型。如果数值的长度超过您为精度指定的值,Amazon Redshift 将根据以下规则对数值进行四舍五入:

  • 如果转换结果的长度超出了您在 format 短语中指定的长度,Amazon Redshift 会返回一个错误。

  • 如果将结果转换为数值,则结果将四舍五入到最接近的值。如果小数部分正好位于上下转换结果的中间位置,则结果将四舍五入到最接近的偶数值。

Examples

以下示例将输入 expression 字符串“1.5”转换为数值“2”。因为语句没有指定小数位数小数位数默认值为 0,并且转换结果不包含分数结果。因为 .5 介于 1 和 2 之间的中间,所以转换结果四舍五入为偶数值 2。

select text_to_numeric_alt('1.5');
text_to_numeric_alt --------------------- 2

以下示例将输入 expression 字符串“2.51”转换为数值 3。因为语句没有指定小数位数小数位数默认值为 0,并且转换结果不包含分数结果。因为 .51 接近 3 而不是 2,所以转换结果四舍五入到值 3。

select text_to_numeric_alt('2.51');
text_to_numeric_alt --------------------- 3

以下示例以 10 为精度,2 为小数位数,将输入 expression 字符串 123.52501 转换为数值 123.53。

select text_to_numeric_alt('123.52501', 10, 2);
text_to_numeric_alt --------------------- 123.53

以下示例指定一个表列作为输入 expression

select text_to_numeric_alt(a), text_to_numeric_alt(b) from t_text2numeric order by 1;
text_to_numeric_alt | text_to_numeric_alt -----------------------------------------+----------------------------------------- -99999999999999999999999999999999999999 | -99999999999999999999999999999999999999 -12300 | -12300 123 | 123 123 | 123 99999999999999999999999999999999999999 | 99999999999999999999999999999999999999

以下是此示例的表定义和 insert 语句。

create table t_text2numeric (a varchar(200), b char(200));
insert into t_text2numeric values ('123', '123'), ('+123.456', '+123.456'), ('-' || repeat('9', 38), '-' || repeat('9', 38)), (repeat('9', 38) || '+', repeat('9', 38) || '+'), ('-123E2', '-123E2');