

 从补丁 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/)。

# CONVERT 函数
<a name="r_CONVERT_function"></a>

与 [CAST 函数](https://docs.aws.amazon.com/redshift/latest/dg/r_CAST_function.html)相似，CONVERT 函数将一种数据类型转换为另一种兼容的数据类型。例如，您可以将字符串转换为日期，或将数值类型转换为字符串。CONVERT 执行运行时转换，这意味着转换不会更改源表中值的数据类型。仅在查询上下文中对其进行更改。

某些数据类型需要使用 CONVERT 函数显式转换为其他数据类型。其他数据类型可进行隐式转换（作为另一个命令的一部分），无需使用 CAST 或 CONVERT。请参阅[类型兼容性和转换](c_Supported_data_types.md#r_Type_conversion)。

## 语法
<a name="r_CONVERT-syntax"></a>

```
CONVERT ( type, expression )
```

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

 *type*   
支持的 [数据类型](c_Supported_data_types.md) 之一。

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

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

CONVERT 返回 *type* 参数指定的数据类型。

**注意**  
如果您尝试执行有问题的转换（例如，会导致精度损失的 DECIMAL 转换），Amazon Redshift 将返回错误。有问题的转换示例如下：  

```
SELECT CONVERT(decimal(2,1), 123.456);
```
或导致溢出的 INTEGER 转换：  

```
SELECT CONVERT(smallint, 12345678);
```

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

某些示例使用示例 [TICKIT 数据库](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)。有关设置示例数据的更多信息，请参阅[加载数据](https://docs.aws.amazon.com/redshift/latest/gsg/cm-dev-t-load-sample-data.html)。

以下查询使用 CONVERT 函数将一些小数列转换为整数

```
SELECT CONVERT(integer, pricepaid)
FROM sales WHERE salesid=100;
```

此示例将整数转换为字符串。

```
SELECT CONVERT(char(4), 2008);
```

在此示例中，当前日期和时间转换为可变字符数据类型：

```
SELECT CONVERT(VARCHAR(30), GETDATE());

getdate
---------
2023-02-02 04:31:16
```

此示例将 saletime 列仅转换只包括时间，删除每行中的日期。

```
SELECT CONVERT(time, saletime), salesid
FROM sales order by salesid limit 10;
```

有关将时间戳从一个时区转换为另一个时区的信息，请参阅 [CONVERT\$1TIMEZONE 函数](CONVERT_TIMEZONE.md)。有关其他日期和时间函数，请参阅[日期和时间函数](Date_functions_header.md)。

以下示例将可变字符数据转换为日期时间对象。

```
SELECT CONVERT(datetime, '2008-02-18 02:36:48') as mysaletime;
```

**注意**  
无法对 `GEOMETRY` 数据类型执行 CAST 或 CONVERT 操作来将其更改为其他数据类型。不过，您可以提供扩展的已知二进制 (EWKB) 格式的字符串文字的十六进制表示形式，作为接受 `GEOMETRY` 参数的函数的输入。例如，下面的 `ST_AsText` 函数需要 `GEOMETRY` 数据类型。  

```
SELECT ST_AsText('01010000000000000000001C400000000000002040');
```

```
st_astext  
------------
 POINT(7 8)
```
您也可以明确指定 `GEOMETRY` 数据类型。  

```
SELECT ST_AsText('010100000000000000000014400000000000001840'::geometry);
```

```
st_astext  
------------
 POINT(5 6)
```