

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# TEXT\$1TO\$1NUMERIC\$1ALT
<a name="r_TEXT_TO_NUMERIC_ALT"></a>

TEXT\$1TO\$1NUMERIC\$1ALT 执行一种 Teradata 类的转换操作，以将字符串转换为数字数据格式。

## 语法
<a name="r_TEXT_TO_NUMERIC_ALT-synopsis"></a>

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

## 参数
<a name="r_TEXT_TO_NUMERIC_ALT-arguments"></a>

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

 *format*   
一个字符串文本，用于定义输入表达式的格式。有关更多信息，请参阅 [数字数据的 Teradata 类格式字符](r_Numeric-format-teradata.md)。

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

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

## 返回类型
<a name="r_TEXT_TO_NUMERIC_ALT-return-type"></a>

TEXT\$1TO\$1NUMERIC\$1ALT 返回一个 DECIMAL 数。

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

Amazon Redshift 使用您在*精度*选项中为该类型指定的最高精度将输入 *expression* 字符串转换为数字类型。如果数值的长度超过您为*精度*指定的值，Amazon Redshift 将根据以下规则对数值进行四舍五入：
+ 如果转换结果的长度超出了您在 *format* 短语中指定的长度，Amazon Redshift 会返回一个错误。
+ 如果将结果转换为数值，则结果将四舍五入到最接近的值。如果小数部分正好位于上下转换结果的中间位置，则结果将四舍五入到最接近的偶数值。

## 示例
<a name="r_TEXT_TO_NUMERIC_ALT-examples"></a>

以下示例将输入 *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\$1”转换为数值 1230。S 字符表示带符号的分区十进制。有关更多信息，请参阅 [数字数据的 Teradata 类格式字符](r_Numeric-format-teradata.md)。

```
select text_to_numeric_alt('123{', '999S');
```

```
text_to_int_alt
----------
      1230
```

以下示例使用 *format* 短语“C9(I)”将输入 *expression* 字符串“USD123”转换为数值 124。请参阅[数字数据的 Teradata 类格式字符](r_Numeric-format-teradata.md)。

```
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');
```