

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

# SIGN 函数
<a name="r_SIGN"></a>

 SIGN 函数返回数字的符号（正或负）。如果参数为正，则 SIGN 函数的结果为 `1`；如果参数为负，则结果为 `-1`；或者，如果参数为 `0`，则结果为 `0`。

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

```
SIGN(number)
```

## 参数
<a name="r_SIGN-argument"></a>

 *number*   
数字或计算结果为数字的表达式。它可以是 `DECIMAL`、`FLOAT8`、或 `SUPER` 类型。Amazon Redshift 可根据隐式转换规则转换其他数据类型。

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

SIGN 返回与输入参数相同的数值数据类型。如果输入为 `DECIMAL`，则输出为 `DECIMAL(1,0)`。

当输入为 `SUPER` 类型时，输出将保留与输入相同的动态类型，而静态类型仍保留 `SUPER` 类型。当 `SUPER` 的动态类型不是数值时，Amazon Redshift 将返回 `NULL`。

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

以下示例显示，由于输入是 `DOUBLE PRECISION`，表 t2 中的列 `d` 将 `DOUBLE PRECISION` 作为其类型；而由于输入是 `NUMERIC`，表 t2 中的列 `n` 将 `NUMERIC(1,0)` 作为输出。

```
CREATE TABLE t1(d DOUBLE PRECISION, n NUMERIC(12, 2));
INSERT INTO t1 VALUES (4.25, 4.25), (-4.25, -4.25);
CREATE TABLE t2 AS SELECT SIGN(d) AS d, SIGN(n) AS n FROM t1;
SELECT table_name, column_name, data_type FROM SVV_REDSHIFT_COLUMNS WHERE table_name='t1' OR table_name='t2';
 
+------------+-------------+-----------------------+
| table_name | column_name |       data_type       |
+------------+-------------+-----------------------+
| t1         | d           | double precision      |
| t1         | n           | numeric(12,2)         |
| t2         | d           | double precision      |
| t2         | n           | numeric(1,0)          |
| t1         | col1        | character varying(20) |
+------------+-------------+-----------------------+
```

以下示例使用 TICKIT 示例数据库。有关更多信息，请参阅 [示例数据库](c_sampledb.md)。

要从 SALES 表中确定为给定交易支付的佣金的符号，请使用以下示例。

```
SELECT commission, SIGN(commission)
FROM sales WHERE salesid=10000;

+------------+------+
| commission | sign |
+------------+------+
|      28.05 |    1 |
+------------+------+
```