TEXT_TO_NUMERIC_ALT
TEXT_TO_NUMERIC_ALT 执行一种 Teradata 类的转换操作,以将字符串转换为数字数据格式。
语法
TEXT_TO_NUMERIC_ALT (expression [, 'format'] [, precision, scale])
参数
- expression
-
计算结果为一个或多个 CHAR 或 VARCHAR 值的表达式,如列名称或文本。转换 null 值将返回 null。空白或空字符串将转换为 0。
- format
-
一个字符串文本,用于定义输入表达式的格式。有关更多信息,请参阅 数字数据的 Teradata 类格式字符。
- 精度
-
数字结果中的位数。默认值为 38。
- 小数位数
-
数字结果中小数点右侧的位数。默认值为 0。
返回类型
TEXT_TO_NUMERIC_ALT 返回一个 DECIMAL 数。
如果转换为您指定的 format 短语不成功,Amazon Redshift 将返回一个错误。
Amazon Redshift 使用您在精度选项中为该类型指定的最高精度将输入 expression 字符串转换为数字类型。如果数值的长度超过您为精度指定的值,Amazon Redshift 将根据以下规则对数值进行四舍五入:
-
如果转换结果的长度超出了您在 format 短语中指定的长度,Amazon Redshift 会返回一个错误。
-
如果将结果转换为数值,则结果将四舍五入到最接近的值。如果小数部分正好位于上下转换结果的中间位置,则结果将四舍五入到最接近的偶数值。
示例
以下示例将输入 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
以下示例使用 format 短语“999S”将输入 expression 字符串“123{”转换为数值 1230。S 字符表示带符号的分区十进制。有关更多信息,请参阅 数字数据的 Teradata 类格式字符。
select text_to_numeric_alt('123{', '999S');
text_to_int_alt ---------- 1230
以下示例使用 format 短语“C9(I)”将输入 expression 字符串“USD123”转换为数值 124。请参阅 数字数据的 Teradata 类格式字符。
select text_to_numeric_alt('USD123.9', 'C9(I)');
text_to_numeric_alt ---------- 124
以下示例指定一个表列作为输入 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');