

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 数学函数
<a name="Math_functions-spark"></a>

本节介绍了 AWS Clean Rooms Spark SQL 中支持的数学运算符和函数。

**Topics**
+ [数学运算符符号](OPERATOR_SYMBOLS.md)
+ [ABS 函数](ABS.md)
+ [ACOS 函数](ACOS.md)
+ [ASIN 函数](ASIN.md)
+ [ATAN 函数](ATAN.md)
+ [ATAN2 函数](ATAN2.md)
+ [CBRT 函数](CBRT.md)
+ [CEILING（或 CEIL）函数](CEILING_FLOOR.md)
+ [COS 函数](COS.md)
+ [COT 函数](COT.md)
+ [DEGREES 函数](DEGREES.md)
+ [DIV 函数](DIV.md)
+ [EXP 函数](EXP.md)
+ [FLOOR 函数](FLOOR.md)
+ [LN 函数](LN.md)
+ [LOG 函数](LOG.md)
+ [MOD 函数](MOD.md)
+ [PI 函数](PI.md)
+ [POWER 函数](POWER.md)
+ [RADIANS 函数](RADIANS.md)
+ [兰德函数](RAND.md)
+ [RANDOM 函数](RANDOM.md)
+ [ROUND 函数](ROUND.md)
+ [SIGN 函数](SIGN.md)
+ [SIN 函数](SIN.md)
+ [SQRT 函数](SQRT.md)
+ [TRUNC 函数](TRUNC.md)

# 数学运算符符号
<a name="OPERATOR_SYMBOLS"></a>

 下表列出了支持的数学运算符。

## 支持的运算符
<a name="OPERATOR_SYMBOLS-supported-operators"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/clean-rooms/latest/sql-reference/OPERATOR_SYMBOLS.html)

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

为给定交易计算支付的佣金加 2.00 美元手续费：

```
select commission, (commission + 2.00) as comm
from sales where salesid=10000;

commission | comm
-----------+-------
28.05      | 30.05
(1 row)
```

为给定交易计算销售价格的 20%：

```
select pricepaid, (pricepaid * .20) as twentypct
from sales where salesid=10000;

pricepaid | twentypct
----------+-----------
187.00    |    37.400
(1 row)
```

根据持续增长模式预测票的销售量。在此示例中，子查询将返回 2008 年销售的票数。在此后 10 年，该结果将以 5% 的连续增长率呈指数增长。

```
select (select sum(qtysold) from sales, date
where sales.dateid=date.dateid and year=2008)
^ ((5::float/100)*10) as qty10years;

qty10years
------------------
587.664019657491
(1 row)
```

查找带有大于或等于 2000 的日期 ID 的销售的总支付价格和总佣金。然后将总支付价格减去总佣金。

```
select sum (pricepaid) as sum_price, dateid,
sum (commission) as sum_comm, (sum (pricepaid) - sum (commission)) as value
from sales where dateid >= 2000
group by dateid order by dateid limit 10;

 sum_price | dateid | sum_comm |   value
-----------+--------+----------+-----------
 364445.00 |   2044 | 54666.75 | 309778.25
 349344.00 |   2112 | 52401.60 | 296942.40
 343756.00 |   2124 | 51563.40 | 292192.60
 378595.00 |   2116 | 56789.25 | 321805.75
 328725.00 |   2080 | 49308.75 | 279416.25
 349554.00 |   2028 | 52433.10 | 297120.90
 249207.00 |   2164 | 37381.05 | 211825.95
 285202.00 |   2064 | 42780.30 | 242421.70
 320945.00 |   2012 | 48141.75 | 272803.25
 321096.00 |   2016 | 48164.40 | 272931.60
(10 rows)
```

# ABS 函数
<a name="ABS"></a>

 ABS 用于计算数字的绝对值，该数字可以是文本或计算结果为数字的表达式。

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

```
ABS (number)
```

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

 * number*   
数字或计算结果为数字的表达式。它可以是 SMALLINT、INTEGER、BIGINT、DECIMAL 或 FLOAT4 FLOAT8 类型。

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

ABS 返回与其参数相同的数据类型。

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

计算 -38 的绝对值：

```
select abs (-38);
abs
-------
38
(1 row)
```

计算 (14-76) 的绝对值：

```
select abs (14-76);
abs
-------
62
(1 row)
```

# ACOS 函数
<a name="ACOS"></a>

ACOS 是返回数字的反余弦的三角函数。返回值采用弧度形式且介于 `0` 和 `PI` 之间。

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

```
ACOS(number)
```

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

 *number*   
输入参数是 `DOUBLE PRECISION` 数。

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

`DOUBLE PRECISION`

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

要返回 `-1` 的反余弦，请使用以下示例。

```
SELECT ACOS(-1);

+-------------------+
|       acos        |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# ASIN 函数
<a name="ASIN"></a>

ASIN 是返回数字的反正弦的三角函数。返回值采用弧度形式且介于 `PI/2` 和 `-PI/2` 之间。

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

```
ASIN(number)
```

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

 *number*   
输入参数是 `DOUBLE PRECISION` 数。

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

`DOUBLE PRECISION`

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

要返回 `1` 的反正弦，请使用以下示例。

```
SELECT ASIN(1) AS halfpi;

+--------------------+
|       halfpi       |
+--------------------+
| 1.5707963267948966 |
+--------------------+
```

# ATAN 函数
<a name="ATAN"></a>

ATAN 是返回数字的反正切的三角函数。返回值采用弧度形式且介于 `-PI` 和 `PI` 之间。

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

```
ATAN(number)
```

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

 *number*   
输入参数是 `DOUBLE PRECISION` 数。

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

`DOUBLE PRECISION`

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

要返回 `1` 的反正切并将其乘以 4，请使用以下示例。

```
SELECT ATAN(1) * 4 AS pi;
            
+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# ATAN2 函数
<a name="ATAN2"></a>

ATAN2 是一个三角函数，它返回一个数除以另一个数字的反正切值。返回值采用弧度形式且介于 `PI/2` 和 `-PI/2` 之间。

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

```
ATAN2(number1, number2)
```

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

 *number1*   
`DOUBLE PRECISION` 数值。

 *number2*   
`DOUBLE PRECISION` 数值。

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

`DOUBLE PRECISION`

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

要返回 `2/2` 的反正切并将其乘以 4，请使用以下示例。

```
SELECT ATAN2(2,2) * 4 AS PI;

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# CBRT 函数
<a name="CBRT"></a>

 CBRT 函数是计算数字的立方根的数学函数。

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

```
CBRT (number)
```

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

CBRT 将 DOUBLE PRECISION 数作为参数。

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

CBRT 返回 DOUBLE PRECISION 数。

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

计算为给定交易支付的佣金的立方根：

```
select cbrt(commission) from sales where salesid=10000;

cbrt
------------------
3.03839539048843
(1 row)
```

# CEILING（或 CEIL）函数
<a name="CEILING_FLOOR"></a>

CEILING 或 CEIL 函数用于将数字向上舍入到下一个整数。（[FLOOR 函数](FLOOR.md)将数字向下舍入到下一个整数） 

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

```
CEIL | CEILING(number)
```

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

 * number*   
数字或计算结果为数字的表达式。它可以是 SMALLINT、INTEGER、BIGINT、DECIMAL 或 FLOAT4 FLOAT8 类型。

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

CEILING 和 CEIL 返回与其参数相同的数据类型。

## 示例
<a name="CEILING_FLOOR-example"></a>

计算为给定销售交易支付的佣金的上限：

```
select ceiling(commission) from sales
where salesid=10000;

ceiling
---------
29
(1 row)
```

# COS 函数
<a name="COS"></a>

COS 是返回数字的余弦的三角函数。返回值采用弧度形式且介于 `-1` 和 `1` 之间（含）。

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

```
COS(double_precision)
```

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

 * number*   
输入参数是双精度数。

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

COS 函数返回双精度数。

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

以下示例返回 0 的余弦：

```
select cos(0);
cos
-----
1
(1 row)
```

以下示例返回 PI 的余弦：

```
select cos(pi());
cos
-----
-1
(1 row)
```

# COT 函数
<a name="COT"></a>

COT 是返回数字的余切的三角函数。输入参数必须为非零。

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

```
COT(number)
```

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

 *number*   
输入参数是 `DOUBLE PRECISION` 数。

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

`DOUBLE PRECISION`

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

要返回 1 的余切，请使用以下示例。

```
SELECT COT(1);

+--------------------+
|        cot         |
+--------------------+
| 0.6420926159343306 |
+--------------------+
```

# DEGREES 函数
<a name="DEGREES"></a>

将用弧度表示的角度转换用度表示。

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

```
DEGREES(number)
```

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

 *number*   
输入参数是 `DOUBLE PRECISION` 数。

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

`DOUBLE PRECISION`

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

要返回 0.5 弧度的等效度数，请使用以下示例。

```
SELECT DEGREES(.5);

+-------------------+
|      degrees      |
+-------------------+
| 28.64788975654116 |
+-------------------+
```

要将 PI 弧度转换为度数，请使用以下示例。

```
SELECT DEGREES(pi());

+---------+
| degrees |
+---------+
|     180 |
+---------+
```

# DIV 函数
<a name="DIV"></a>

DIV 运算符返回除数除以股息的整数部分。

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

```
dividend div divisor
```

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

 *分红*   
计算结果为数值或间隔的表达式。

*除数*  
匹配的间隔类型 `dividend` if 为间隔，否则为数字。

## 返回类型
<a name="DIV-returns"></a>

`BIGINT`

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

以下示例从松鼠表中选择了两列：一`id`列（包含每只松鼠的唯一标识符）和一`calculated`列（表示年龄列除以 2 的整数）。`age div 2`该`age div 2`计算对`age`列执行整数除法，实际上是将年龄向下舍入到最接近的偶数整数。例如，如果该`age`列包含诸如 3、5、7 和 10 之类的值，则该`age div 2`列将分别包含值 1、2、3 和 5。

```
SELECT id, age div 2 FROM squirrels
```

在需要根据年龄范围对数据进行分组或分析的情况下，此查询非常有用，并且您希望通过将年龄值向下舍入到最接近的偶数整数来简化年龄值。生成的输出将提供`squirrels`表中每只松鼠的年龄除以2。`id`

# EXP 函数
<a name="EXP"></a>

EXP 函数实施数值表达式的指数函数，即以自然对数 `e` 为底数，对表达式求次方。EXP 函数是 [LN 函数](LN.md)的反函数。

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

```
EXP (expression)
```

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

 *expression*   
表达式必须是 INTEGER、DECIMAL 或 DOUBLE PRECISION 数据类型。

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

EXP 返回 DOUBLE PRECISION 数。

## 示例
<a name="EXP-example"></a>

使用 EXP 函数根据持续增长模式预测票的销售量。在此示例中，子查询将返回 2008 年销售的票数。该结果将乘以 EXP 函数的结果（指定了在接下来 10 年保持 7% 的持续增长率）。

```
select (select sum(qtysold) from sales, date
where sales.dateid=date.dateid
and year=2008) * exp((7::float/100)*10) qty2018;

qty2018
------------------
695447.483772222
(1 row)
```

# FLOOR 函数
<a name="FLOOR"></a>

FLOOR 函数将数字向下舍入到下一个整数。

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

```
FLOOR (number)
```

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

 * number*   
数字或计算结果为数字的表达式。它可以是 SMALLINT、INTEGER、BIGINT、DECIMAL 或 FLOAT4 FLOAT8 类型。

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

FLOOR 返回与其参数相同的数据类型。

## 示例
<a name="FLOOR-example"></a>

此示例显示在使用 FLOOR 函数之前和之后为给定的销售交易支付的佣金值。

```
select commission from sales
where salesid=10000;

floor
-------
28.05
(1 row)

select floor(commission) from sales
where salesid=10000;

floor
-------
28
(1 row)
```

# LN 函数
<a name="LN"></a>

LN 函数返回输入参数的自然对数。

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

```
LN(expression)
```

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

 *expression*   
对其执行函数的目标列或表达式。  
如果表达式引用了 AWS Clean Rooms 用户创建的表或 AWS Clean Rooms STL 或 STV 系统表，则此函数会返回某些数据类型的错误。
具有以下数据类型的表达式在引用了用户创建的表或系统表时将产生错误。  
+ BOOLEAN 
+ CHAR 
+ DATE 
+ DECIMAL 或 NUMERIC 
+ TIMESTAMP 
+ VARCHAR 
具有以下数据类型的表达式可在用户创建的表以及 STL 或 STV 系统表上成功运行：  
+ BIGINT 
+ DOUBLE PRECISION 
+ INTEGER 
+ REAL 
+ SMALLINT 

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

LN 函数返回与表达式相同的类型。

## 示例
<a name="LN-example"></a>

以下示例返回数字 2.718281828 的自然对数（即以 e 为底的对数）：

```
select ln(2.718281828);
ln
--------------------
0.9999999998311267
(1 row)
```

请注意，结果约等于 1。

此示例返回 USERS 表的 USERID 列中的值的自然对数：

```
select username, ln(userid) from users order by userid limit 10;

 username |        ln
----------+-------------------
 JSG99FHE |                 0
 PGL08LJI | 0.693147180559945
 IFT66TXU |  1.09861228866811
 XDZ38RDD |  1.38629436111989
 AEB55QTM |   1.6094379124341
 NDQ15VBM |  1.79175946922805
 OWY35QYB |  1.94591014905531
 AZG78YIP |  2.07944154167984
 MSD36KVR |  2.19722457733622
 WKW41AIW |  2.30258509299405
(10 rows)
```

# LOG 函数
<a name="LOG"></a>

返回 with 的对数。`expr` `base`

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

```
LOG(base, expr)
```

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

 *expr*   
表达式必须具有整数、小数或浮点数据类型。

 *base*   
对数计算的基数。必须是双精度数据类型的正数（不等于 1）。

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

LOG 函数返回双精度数。

## 示例
<a name="LOG-example"></a>

以下示例返回数字 100 的以 10 为底的对数：

```
select log(10, 100);
--------
2
(1 row)
```

# MOD 函数
<a name="MOD"></a>

返回两个数字的余数，也称为*取模* 运算。将第一个参数除以第二个参数来计算结果。

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

```
MOD(number1, number2)
```

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

 *number1*   
第一个输入参数是 INTEGER、SMALLINT、BIGINT 或 DECIMAL 数。如果其中一个参数是 DECIMAL 类型，则另一参数也必须是 DECIMAL 类型。如果其中一个参数是 INTEGER，则另一参数可以是 INTEGER、SMALLINT 或 BIGINT。两个参数也都可以是 SMALLINT 或 BIGINT，但如果一个参数是 BIGINT，则另一个参数不能是 SMALLINT。

 *number2*   
第二个参数是 INTEGER、SMALLINT、BIGINT 或 DECIMAL 数。相同的数据类型规则与 *number1* 一样适用于 *number2*。

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

有效的返回类型是 DECIMAL、INT、SMALLINT 或 BIGINT。如果两个参数属于相同的类型，MOD 函数的返回类型是与输入参数相同的数值类型。但是，如果其中一个输入参数是 INTEGER，返回类型也将是 INTEGER。

## 使用说明
<a name="MOD-usage-notes"></a>

您可以使用 *%* 作为取模运算符。

## 示例
<a name="MOD-example"></a>

以下示例返回一个数字除以另一个数字后的余数：

```
SELECT MOD(10, 4);
               
 mod
------
 2
```

以下示例返回一个小数结果：

```
SELECT MOD(10.5, 4);
               
 mod
------
 2.5
```

您可以转换参数值：

```
SELECT MOD(CAST(16.4 as integer), 5);
               
 mod
------
 1
```

通过将第一个参数除以 2 来检查该参数是否为偶数：

```
SELECT mod(5,2) = 0 as is_even;
               
 is_even
--------
 false
```

您可以使用 *%* 作为取模运算符：

```
SELECT 11 % 4 as remainder;
               
 remainder
-----------
 3
```

以下示例返回 CATEGORY 表中的奇数类别的信息：

```
select catid, catname
from category
where mod(catid,2)=1
order by 1,2;

 catid |  catname
-------+-----------
     1 | MLB
     3 | NFL
     5 | MLS
     7 | Plays
     9 | Pop
    11 | Classical

(6 rows)
```

# PI 函数
<a name="PI"></a>

PI 函数返回 14 个小数位的 pi 值。

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

```
PI()
```

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

`DOUBLE PRECISION`

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

要返回 pi 的值，请使用以下示例。

```
SELECT PI();

+-------------------+
|        pi         |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# POWER 函数
<a name="POWER"></a>

 POWER 函数是让一个数值表达式自乘到另一个数值表达式的幂的指数函数。例如，2 的三次幂的计算公式为 `POWER(2,3)`，结果为 `8`。

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

```
{POWER(expression1, expression2)
```

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

 *expression1*   
要自乘的数值表达式。必须是 `INTEGER`、`DECIMAL` 或 `FLOAT` 数据类型。

 *expression2*   
让 *expression1* 自乘到的幂。必须是 `INTEGER`、`DECIMAL` 或 `FLOAT` 数据类型。

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

`DOUBLE PRECISION`

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

```
SELECT (SELECT SUM(qtysold) FROM sales, date
WHERE sales.dateid=date.dateid
AND year=2008) * POW((1+7::FLOAT/100),10) qty2010;

+-------------------+
|      qty2010      |
+-------------------+
| 679353.7540885945 |
+-------------------+
```

# RADIANS 函数
<a name="RADIANS"></a>

RADIANS 函数将用度表示的角度转换为用弧度表示。

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

```
RADIANS(number)
```

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

 *number*   
输入参数是 `DOUBLE PRECISION` 数。

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

`DOUBLE PRECISION`

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

要返回 180 度的等效弧度，请使用以下示例。

```
SELECT RADIANS(180);

+-------------------+
|      radians      |
+-------------------+
| 3.141592653589793 |
+-------------------+
```

# 兰德函数
<a name="RAND"></a>

RAND 函数生成一个介于 0 和 1 之间的随机浮点数。每次调用 RAND 函数时，都会生成一个新的随机数。

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

```
RAND()
```

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

随机返回双精度。

## 示例
<a name="RAND-example"></a>

以下示例为表中的每一行生成一列介于 0 和 1 之间的随机浮点数。`squirrels`生成的输出将是包含随机十进制值列表的单列，松鼠表中的每行都有一个值。

```
SELECT rand() FROM squirrels
```

当您需要生成随机数时，例如模拟随机事件或在数据分析中引入随机性时，这种类型的查询非常有用。在该`squirrels`表的上下文中，它可以用来为每只松鼠分配随机值，然后将其用于进一步的处理或分析。

# RANDOM 函数
<a name="RANDOM"></a>

RANDOM 函数生成介于 0.0（含）和 1.0（不含）之间的随机值。

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

```
RANDOM()
```

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

RANDOM 返回 DOUBLE PRECISION 数。

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

1. 计算介于 0 和 99 之间的随机值。如果随机数为 0 - 1，此查询将生成 0 - 100 的随机值：

   ```
   select cast (random() * 100 as int);
   
   INTEGER
   ------
   24
   (1 row)
   ```

1. 检索 10 个项目的统一随机样本：

   ```
   select * 
   from sales
   order by random()
   limit 10;
   ```

   现在检索 10 个项目的随机样本，但选择与其价格成比例的项目。例如，价格是另一个两倍的项目在查询结果中出现的可能性是其两倍：

   ```
   select * 
   from sales
   order by log(1 - random()) / pricepaid
   limit 10;
   ```

1. 此示例使用 SET 命令设置一个 SEED 值，以使 RANDOM 生成可预测的数字序列。

   首先，返回三个 RANDOM 整数，而不先设置 SEED 值：

   ```
   select cast (random() * 100 as int);
   INTEGER
   ------
   6
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   68
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   56
   (1 row)
   ```

   现在，将 SEED 值设置为 `.25`，并返回 3 个以上的 RANDOM 数字：

   ```
   set seed to .25;
   select cast (random() * 100 as int);
   INTEGER
   ------
   21
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   79
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   12
   (1 row)
   ```

   最后，将 SEED 值重置为 `.25`，并验证 RANDOM 是否返回与前三个调用相同的结果：

   ```
   set seed to .25;
   select cast (random() * 100 as int);
   INTEGER
   ------
   21
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   79
   (1 row)
   
   select cast (random() * 100 as int);
   INTEGER
   ------
   12
   (1 row)
   ```

# ROUND 函数
<a name="ROUND"></a>

ROUND 函数将数字舍入到最近的整数或小数。

ROUND 函数可以选择性地以整数形式包含另一个参数，指示在任意方向舍入到的小数位数。当您不提供第二个参数时，函数会舍入到最接近的整数。指定第二个参数 *>n* 时，函数将舍入为最接近的数字，其中精度为 *n* 个小数位。

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

```
ROUND (number [ , integer ] )
```

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

 * number*   
数字或计算结果为数字的表达式。它可以是十进制或 FLOAT8 类型。 AWS Clean Rooms 可以根据隐式转换规则转换其他数据类型。

*integer*（可选）  
一个整数，指示任意方向四舍五入的小数位数。

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

ROUND 返回与输入参数相同的数字数据类型。

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

将为给定交易支付的佣金舍入到最近的整数。

```
select commission, round(commission)
from sales where salesid=10000;

commission | round
-----------+-------
     28.05 |    28
(1 row)
```

将为给定交易支付的佣金舍入到第一个小数位。

```
select commission, round(commission, 1)
from sales where salesid=10000;

commission | round
-----------+-------
     28.05 |  28.1
(1 row)
```

对于同一查询，请沿相反的方向扩展精度。

```
select commission, round(commission, -1)
from sales where salesid=10000;

commission | round
-----------+-------
     28.05 |    30
(1 row)
```

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

 SIGN 函数返回数字的符号（正或负）。SIGN 函数的结果为 `1`、`-1` 或 `0`，表示参数的符号。

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

```
SIGN (number)
```

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

 * number*   
数字或计算结果为数字的表达式。它可以是 DECIMALor FLOAT8 类型。 AWS Clean Rooms 可以根据隐式转换规则转换其他数据类型。

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

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

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

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

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

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

# SIN 函数
<a name="SIN"></a>

SIN 是返回数字的正弦的三角函数。返回值介于 `-1` 与 `1` 之间。

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

```
SIN(number)
```

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

 * number*   
以弧度表示的 `DOUBLE PRECISION` 数值。

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

`DOUBLE PRECISION` 

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

要返回 `-PI` 的正弦，请使用以下示例。

```
SELECT SIN(-PI());

+-------------------------+
|           sin           |
+-------------------------+
| -0.00000000000000012246 |
+-------------------------+
```

# SQRT 函数
<a name="SQRT"></a>

 SQRT 函数返回数字值的平方根。平方根是一个乘以自身以得到给定值的数字。

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

```
SQRT (expression)
```

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

 *expression*   
表达式必须具有整数、小数或浮点数据类型。表达式可以包含函数。系统可能会执行隐式类型转换。

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

SQRT 返回 DOUBLE PRECISION 数。

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

以下示例返回数字的平方根。

```
select sqrt(16);
               
sqrt
---------------
4
```

以下示例执行隐式类型转换。

```
select sqrt('16');
               
sqrt
---------------
4
```

以下示例嵌套函数以执行更复杂的任务。

```
select sqrt(round(16.4)); 

sqrt
---------------
4
```

以下示例得出给定圆面积时的半径长度。例如，当给定以平方英寸为单位的面积时，它以英寸为单位计算半径。示例中的面积为 20。

```
select sqrt(20/pi());
```

这将返回值 5.046265044040321。

以下示例返回 SALES 表中 COMMISSION 值的平方根。COMMISSION 列是 DECIMAL 列。此示例说明如何在具有更复杂条件逻辑的查询中使用该函数。

```
select sqrt(commission)
from sales where salesid < 10 order by salesid;

sqrt
------------------
10.4498803820905
3.37638860322683
7.24568837309472
5.1234753829798
...
```

以下查询返回同一组 COMMISSION 值的平方根的舍入值。

```
select salesid, commission, round(sqrt(commission))
from sales where salesid < 10 order by salesid;

salesid | commission | round
--------+------------+-------
      1 |     109.20 |    10
      2 |      11.40 |     3
      3 |      52.50 |     7
      4 |      26.25 |     5
...
```

有关中示例数据的更多信息 AWS Clean Rooms，请参阅[示例数据库](https://docs.aws.amazon.com/redshift/latest/dg/c_sampledb.html)。

# TRUNC 函数
<a name="TRUNC"></a>

TRUNC 函数将数字截断为前一个整数或小数。

TRUNC 函数可以选择性地以整数形式包含另一个参数，指示在任意方向舍入到的小数位数。当您不提供第二个参数时，函数会舍入到最接近的整数。当指定第二个参数 *>n* 时，函数将舍入为最接近的数字 *>n* 精度的小数位。此函数还会截断时间戳并返回日期。

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

```
TRUNC (number [ , integer ] |
timestamp )
```

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

 * number*   
数字或计算结果为数字的表达式。它可以是十进制或 FLOAT8 类型。 AWS Clean Rooms 可以根据隐式转换规则转换其他数据类型。

 *integer*（可选）   
一个整数，指示精度在任意方向的小数位数。如果未提供整数，数字将作为整数截断；如果指定了整数，数字将截断到指定的小数位。

 *timestamp*   
该函数也可返回时间戳中的日期。（要返回以 `00:00:00` 作为时间的时间戳值，请将函数结果强制转换为时间戳。） 

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

TRUNC 返回与第一个输入参数的数据类型相同的数据类型。对于时间戳，TRUNC 将返回日期。

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

截断为给定销售交易支付的佣金。

```
select commission, trunc(commission)
from sales where salesid=784;

commission | trunc
-----------+-------
    111.15 |   111

(1 row)
```

将同一佣金值截断到第一个小数位。

```
select commission, trunc(commission,1)
from sales where salesid=784;

commission | trunc
-----------+-------
    111.15 | 111.1

(1 row)
```

截断第二个参数为负值的佣金；`111.15` 向下舍入到 `110`。

```
select commission, trunc(commission,-1)
from sales where salesid=784;

commission | trunc
-----------+-------
    111.15 |   110
(1 row)
```

返回 SYSDATE 函数（返回时间戳）的结果的日期部分：

```
select sysdate;

timestamp
----------------------------
2011-07-21 10:32:38.248109
(1 row)

select trunc(sysdate);

trunc
------------
2011-07-21
(1 row)
```

将 TRUNC 函数应用于 TIMESTAMP 列。返回类型为日期。

```
select trunc(starttime) from event
order by eventid limit 1;

trunc
------------
2008-01-25
(1 row)
```