

# 内置函数

> 译者：[flink.sojb.cn](https://flink.sojb.cn/)


Flink Table API和SQL为用户提供了一组用于数据转换的内置函数。本页简要概述了它们。如果尚不支持您需要的函数，则可以实现[用户定义的函数](udfs.html)。如果您认为该函数足够通用，请[打开一个Jira问题](https://issues.apache.org/jira/secure/CreateIssue!default.jspa)并附上详细说明。

## 标量函数

标量函数将零，一个或多个值作为输入，并返回单个值作为结果。

### 比较函数

*   [**SQL**](#tab_SQL_0)
*   [**Java**](#tab_java_0)
*   [**Scala**](#tab_scala_0)

| 比较函数 | 描述 |
| --- | --- |
| `value1 = value2` | 如果_value1_等于_value2_，则返回TRUE ; 如果_value1_或_value2_为NULL，则返回UNKNOWN 。 |
| `value1 &lt;&gt; value2` | 如果_value1_不等于_value2_，则返回TRUE ; 如果_value1_或_value2_为NULL，则返回UNKNOWN 。 |
| `value1 &gt; value2` | 如果_value1_大于_value2_，则返回TRUE ; 如果_value1_或_value2_为NULL，则返回UNKNOWN 。 |
| `value1 &gt;= value2` | 如果_value1_大于或等于_value2_，则返回TRUE ; 如果_value1_或_value2_为NULL，则返回UNKNOWN 。 |
| `value1 &lt; value2` | 如果_value1_小于_value2_，则返回TRUE ; 如果_value1_或_value2_为NULL，则返回UNKNOWN 。 |
| `value1 &lt;= value2` | 如果_value1_小于或等于_value2_，则返回TRUE ; 如果_value1_或_value2_为NULL，则返回UNKNOWN 。 |
| `value IS NULL` | 如果_value_为NULL，则返回TRUE 。 |
| `value IS NOT NULL` | 如果_value_不为NULL，则返回TRUE 。 |
| `value1 IS DISTINCT FROM value2` | 如果两个值不相等，则返回TRUE。NULL值在此处视为相同。例如，`1 IS DISTINCT FROM NULL`返回TRUE; `NULL IS DISTINCT FROM NULL`返回FALSE。 |
| `value1 IS NOT DISTINCT FROM value2` | 如果两个值相等，则返回TRUE。NULL值在此处视为相同。例如，`1 IS NOT DISTINCT FROM NULL`返回FALSE; `NULL IS NOT DISTINCT FROM NULL`返回TRUE。 |
| `value1 BETWEEN [ ASYMMETRIC &#124; SYMMETRIC ] value2 AND value3` | 默认情况下（或使用ASYMMETRIC关键字），如果_value1_大于或等于_value2_且小于或等于_value3_，则返回TRUE 。使用SYMMETRIC关键字，如果_value1_包含在_value2_和_value3_之间，则返回TRUE 。当_value2_或_value3_为NULL时，返回FALSE或UNKNOWN。例如，`12 BETWEEN 15 AND 12`返回FALSE; `12 BETWEEN SYMMETRIC 15 AND 12`返回TRUE; `12 BETWEEN 10 AND NULL`返回UNKNOWN; `12 BETWEEN NULL AND 10`返回FALSE; `12 BETWEEN SYMMETRIC NULL AND 12`返回UNKNOWN。 |
| `value1 NOT BETWEEN [ ASYMMETRIC &#124; SYMMETRIC ] value2 AND value3` | 默认情况下（或使用ASYMMETRIC关键字），如果_value1_小于_value2_或大于_value3_，则返回TRUE 。使用SYMMETRIC关键字，如果_value1_不包含在_value2_和_value3_之间，则返回TRUE 。当_value2_或_value3_为NULL时，返回TRUE或UNKNOWN。例如，`12 NOT BETWEEN 15 AND 12`返回TRUE; `12 NOT BETWEEN SYMMETRIC 15 AND 12`返回FALSE; `12 NOT BETWEEN NULL AND 15`返回UNKNOWN; `12 NOT BETWEEN 15 AND NULL`返回TRUE; `12 NOT BETWEEN SYMMETRIC 12 AND NULL`返回UNKNOWN。 |
| `string1 LIKE string2 [ ESCAPE char ]` | 如果_string1_匹配模式_string2_，则返回TRUE ; 如果_string1_或_string2_为NULL，则返回UNKNOWN 。如有必要，可以定义转义字符。**注意：**尚未支持转义字符。 |
| `string1 NOT LIKE string2 [ ESCAPE char ]` | 如果_string1_与模式_string2_不匹配，则返回TRUE ; 如果_string1_或_string2_为NULL，则返回UNKNOWN 。如有必要，可以定义转义字符。**注意：**尚未支持转义字符。 |
| `string1 SIMILAR TO string2 [ ESCAPE char ]` | 如果_string1_匹配SQL正则表达式_string2_，则返回TRUE ; 如果_string1_或_string2_为NULL，则返回UNKNOWN 。如有必要，可以定义转义字符。**注意：**尚未支持转义字符。 |
| `string1 NOT SIMILAR TO string2 [ ESCAPE char ]` | 如果_string1_与SQL正则表达式_string2_不匹配，则返回TRUE ; 如果_string1_或_string2_为NULL，则返回UNKNOWN 。如有必要，可以定义转义字符。**注意：**尚未支持转义字符。 |
| `value1 IN (value2 [, value3]* )` | 如果给定列表中存在_value1_ _（value2，value3，...），_则返回TRUE 。当_（value2，value3，...）_。包含NULL，如果可以找到该数据元则返回TRUE，否则返回UNKNOWN。如果_value1_为NULL，则始终返回UNKNOWN 。例如，`4 IN (1, 2, 3)`返回FALSE; `1 IN (1, 2, NULL)`返回TRUE; `4 IN (1, 2, NULL)`返回UNKNOWN。 |
| `value1 NOT IN (value2 [, value3]* )` | 如果给定列表中不存在_value1_ _（value2，value3，...），_则返回TRUE 。当_（value2，value3，...）_。包含NULL，如果可以找到_value1_则返回FALSE ，否则返回UNKNOWN。如果_value1_为NULL，则始终返回UNKNOWN 。例如，`4 NOT IN (1, 2, 3)`返回TRUE; `1 NOT IN (1, 2, NULL)`返回FALSE; `4 NOT IN (1, 2, NULL)`返回UNKNOWN。 |
| `EXISTS (sub-query)` | 如果_子查询_返回至少一行，则返回TRUE 。仅在可以在连接和组 算子操作中重写 算子操作时才支持。**注意：**对于流式查询， 算子操作将在连接和组 算子操作中重写。计算查询结果所需的状态可能会无限增长，具体取决于不同输入行的数量。请提供具有有效保存间隔的查询配置，以防止过大的状态。有关详细信息，请参阅[Streaming Concepts](streaming.html)。 |
| `value IN (sub-query)` | 如果_value_等于子查询返回的行，则返回TRUE 。**注意：**对于流式查询， 算子操作将在连接和组 算子操作中重写。计算查询结果所需的状态可能会无限增长，具体取决于不同输入行的数量。请提供具有有效保存间隔的查询配置，以防止过大的状态。有关详细信息，请参阅[Streaming Concepts](streaming.html)。 |
| `value NOT IN (sub-query)` | 如果_value_不等于_子查询_返回的每一行，则返回TRUE 。**注意：**对于流式查询， 算子操作将在连接和组 算子操作中重写。计算查询结果所需的状态可能会无限增长，具体取决于不同输入行的数量。请提供具有有效保存间隔的查询配置，以防止过大的状态。有关详细信息，请参阅[Streaming Concepts](streaming.html)。 |

| Comparison functions | Description |
| --- | --- |
| `ANY1 === ANY2` | Returns TRUE if _ANY1_ is equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 !== ANY2` | Returns TRUE if _ANY1_ is not equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &gt; ANY2` | Returns TRUE if _ANY1_ is greater than _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &gt;= ANY2` | Returns TRUE if _ANY1_ is greater than or equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &lt; ANY2` | Returns TRUE if _ANY1_ is less than _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &lt;= ANY2` | Returns TRUE if _ANY1_ is less than or equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY.isNull` | Returns TRUE if _ANY_ is NULL. |
| `ANY.isNotNull` | Returns TRUE if _ANY_ is not NULL. |
| `STRING1.like(STRING2)` | Returns TRUE if _STRING1_ matches pattern _STRING2_; returns UNKNOWN if _STRING1_ or _STRING2_ is NULL.E.g., `"JoKn".like("Jo_n%")` returns TRUE. |
| `STRING.similar(STRING)` | Returns TRUE if _STRING1_ matches SQL regular expression _STRING2_; returns UNKNOWN if _STRING1_ or _STRING2_ is NULL.E.g., `"A".similar("A+")` returns TRUE. |
| `ANY1.in(ANY2, ANY3, ...)` | Returns TRUE if _ANY1_ exists in a given list _(ANY2, ANY3, ...)_. When _(ANY2, ANY3, ...)_. contains NULL, returns TRUE if the element can be found and UNKNOWN otherwise. Always returns UNKNOWN if _ANY1_ is NULL.E.g., `4.in(1, 2, 3)` returns FALSE. |
| `ANY.in(TABLE)` | Returns TRUE if _ANY_ is equal to a row returned by sub-query _TABLE_.**Note:** For streaming queries the operation is rewritten in a join and group operation. The required state to compute the query result might grow infinitely depending on the number of distinct input rows. Please provide a query configuration with valid retention interval to prevent excessive state size. See [Streaming Concepts](streaming.html) for details. |
| `ANY1.between(ANY2, ANY3)` | Returns TRUE if _ANY1_ is greater than or equal to _ANY2_ and less than or equal to _ANY3_. When either _ANY2_ or _ANY3_ is NULL, returns FALSE or UNKNOWN.E.g., `12.between(15, 12)` returns FALSE; `12.between(10, Null(INT))` returns UNKNOWN; `12.between(Null(INT), 10)` returns FALSE. |
| `ANY1.notBetween(ANY2, ANY3)` | Returns TRUE if _ANY1_ is less than _ANY2_ or greater than _ANY3_. When either _ANY2_ or _ANY3_ is NULL, returns TRUE or UNKNOWN.E.g., `12.notBetween(15, 12)` returns TRUE; `12.notBetween(Null(INT), 15)` returns UNKNOWN; `12.notBetween(15, Null(INT))` returns TRUE. |

| Comparison functions | Description |
| --- | --- |
| `ANY1 === ANY2` | Returns TRUE if _ANY1_ is equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 !== ANY2` | Returns TRUE if _ANY1_ is not equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &gt; ANY2` | Returns TRUE if _ANY1_ is greater than _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &gt;= ANY2` | Returns TRUE if _ANY1_ is greater than or equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &lt; ANY2` | Returns TRUE if _ANY1_ is less than _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY1 &lt;= ANY2` | Returns TRUE if _ANY1_ is less than or equal to _ANY2_; returns UNKNOWN if _ANY1_ or _ANY2_ is NULL. |
| `ANY.isNull` | Returns TRUE if _ANY_ is NULL. |
| `ANY.isNotNull` | Returns TRUE if _ANY_ is not NULL. |
| `STRING1.like(STRING2)` | Returns TRUE if _STRING1_ matches pattern _STRING2_; returns UNKNOWN if _STRING1_ or _STRING2_ is NULL.E.g., `"JoKn".like("Jo_n%")` returns TRUE. |
| `STRING1.similar(STRING2)` | Returns TRUE if _STRING1_ matches SQL regular expression _STRING2_; returns UNKNOWN if _STRING1_ or _STRING2_ is NULL.E.g., `"A".similar("A+")` returns TRUE. |
| `ANY1.in(ANY2, ANY3, ...)` | Returns TRUE if _ANY1_ exists in a given list _(ANY2, ANY3, ...)_. When _(ANY2, ANY3, ...)_. contains NULL, returns TRUE if the element can be found and UNKNOWN otherwise. Always returns UNKNOWN if _ANY1_ is NULL.E.g., `4.in(1, 2, 3)` returns FALSE. |
| `ANY.in(TABLE)` | Returns TRUE if _ANY_ is equal to a row returned by sub-query _TABLE_.**Note:** For streaming queries the operation is rewritten in a join and group operation. The required state to compute the query result might grow infinitely depending on the number of distinct input rows. Please provide a query configuration with valid retention interval to prevent excessive state size. See [Streaming Concepts](streaming.html) for details. |
| `ANY1.between(ANY2, ANY3)` | Returns TRUE if _ANY1_ is greater than or equal to _ANY2_ and less than or equal to _ANY3_. When either _ANY2_ or _ANY3_ is NULL, returns FALSE or UNKNOWN.E.g., `12.between(15, 12)` returns FALSE; `12.between(10, Null(Types.INT))` returns UNKNOWN; `12.between(Null(Types.INT), 10)` returns FALSE. |
| `ANY1.notBetween(ANY2, ANY3)` | Returns TRUE if _ANY1_ is less than _ANY2_ or greater than _ANY3_. When either _ANY2_ or _ANY3_ is NULL, returns TRUE or UNKNOWN.E.g., `12.notBetween(15, 12)` returns TRUE; `12.notBetween(Null(Types.INT), 15)` returns UNKNOWN; `12.notBetween(15, Null(Types.INT))` returns TRUE. |

### 逻辑函数

*   [**SQL**](#tab_SQL_1)
*   [**Java**](#tab_java_1)
*   [**Scala**](#tab_scala_1)

| 逻辑函数 | 描述 |
| --- | --- |
| `boolean1 OR boolean2` | 如果_boolean1_为TRUE或_boolean2_为TRUE，则返回TRUE。支持三值逻辑。例如，`TRUE OR UNKNOWN`返回TRUE。 |
| `boolean1 AND boolean2` | 如果_boolean1_和_boolean2_都为TRUE，则返回TRUE。支持三值逻辑。例如，`TRUE AND UNKNOWN`返回UNKNOWN。 |
| `NOT boolean` | 如果_boolean_为FALSE，则返回TRUE ; 否则返回TRUE 。如果_boolean_为TRUE，则返回FALSE ; 如果_布尔_值为UNKNOWN，则返回UNKNOWN。 |
| `boolean IS FALSE` | 如果_boolean_为FALSE，则返回TRUE ; 否则返回TRUE 。如果_boolean_为TRUE或UNKNOWN，则返回FALSE 。 |
| `boolean IS NOT FALSE` | 如果_boolean_为TRUE或UNKNOWN，则返回TRUE;否则返回TRUE 。如果_boolean_为FALSE，则返回FALSE。 |
| `boolean IS TRUE` | 如果_boolean_为TRUE，则返回TRUE; 如果_boolean_为FALSE或UNKNOWN，则返回FALSE 。 |
| `boolean IS NOT TRUE` | 如果_boolean_为FALSE或UNKNOWN，则返回TRUE;否则返回TRUE 。如果_boolean_为FALSE，则返回FALSE。 |
| `boolean IS UNKNOWN` | 如果_boolean_是UNKNOWN，则返回TRUE ; 否则返回TRUE 。如果_boolean_为TRUE或FALSE，则返回FALSE。 |
| `boolean IS NOT UNKNOWN` | 如果_boolean_为TRUE或FALSE，则返回TRUE;否则返回TRUE 。如果_布尔_值为UNKNOWN，则返回FALSE 。 |

| Logical functions | Description |
| --- | --- |
| `BOOLEAN1 &#124;&#124; BOOLEAN2` | Returns TRUE if _BOOLEAN1_ is TRUE or _BOOLEAN2_ is TRUE. Supports three-valued logic.E.g., `true &#124;&#124; Null(BOOLEAN)` returns TRUE. |
| `BOOLEAN1 && BOOLEAN2` | Returns TRUE if _BOOLEAN1_ and _BOOLEAN2_ are both TRUE. Supports three-valued logic.E.g., `true && Null(BOOLEAN)` returns UNKNOWN. |
| `!BOOLEAN` | Returns TRUE if _BOOLEAN_ is FALSE; returns FALSE if _BOOLEAN_ is TRUE; returns UNKNOWN if _BOOLEAN_ is UNKNOWN. |
| `BOOLEAN.isTrue` | Returns TRUE if _BOOLEAN_ is TRUE; returns FALSE if _BOOLEAN_ is FALSE or UNKNOWN. |
| `BOOLEAN.isFalse` | Returns TRUE if _BOOLEAN_ is FALSE; returns FALSE if _BOOLEAN_ is TRUE or UNKNOWN. |
| `BOOLEAN.isNotTrue` | Returns TRUE if _BOOLEAN_ is FALSE or UNKNOWN; returns FALSE if _BOOLEAN_ is FALSE. |
| `BOOLEAN.isNotFalse` | Returns TRUE if _BOOLEAN_ is TRUE or UNKNOWN; returns FALSE if _BOOLEAN_ is FALSE. |

| Logical functions | Description |
| --- | --- |
| `BOOLEAN1 &#124;&#124; BOOLEAN2` | Returns TRUE if _BOOLEAN1_ is TRUE or _BOOLEAN2_ is TRUE. Supports three-valued logic.E.g., `true &#124;&#124; Null(Types.BOOLEAN)` returns TRUE. |
| `BOOLEAN1 && BOOLEAN2` | Returns TRUE if _BOOLEAN1_ and _BOOLEAN2_ are both TRUE. Supports three-valued logic.E.g., `true && Null(Types.BOOLEAN)` returns UNKNOWN. |
| `!BOOLEAN` | Returns TRUE if _BOOLEAN_ is FALSE; returns FALSE if _BOOLEAN_ is TRUE; returns UNKNOWN if _BOOLEAN_ is UNKNOWN. |
| `BOOLEAN.isTrue` | Returns TRUE if _BOOLEAN_ is TRUE; returns FALSE if _BOOLEAN_ is FALSE or UNKNOWN. |
| `BOOLEAN.isFalse` | Returns TRUE if _BOOLEAN_ is FALSE; returns FALSE if _BOOLEAN_ is TRUE or UNKNOWN. |
| `BOOLEAN.isNotTrue` | Returns TRUE if _BOOLEAN_ is FALSE or UNKNOWN; returns FALSE if _BOOLEAN_ is FALSE. |
| `BOOLEAN.isNotFalse` | Returns TRUE if _BOOLEAN_ is TRUE or UNKNOWN; returns FALSE if _BOOLEAN_ is FALSE. |

### 算术函数

*   [**SQL**](#tab_SQL_2)
*   [**Java**](#tab_java_2)
*   [**Scala**](#tab_scala_2)

| 算术函数 | 描述 |
| --- | --- |
| `+ numeric` | 返回_数字_。 |
| `- numeric` | 返回负_数字_。 |
| `numeric1 + numeric2` | 返回_numeric1_加上_numeric2_。 |
| `numeric1 - numeric2` | 返回_numeric1_减去_numeric2_。 |
| `numeric1 * numeric2` | 返回_numeric1_乘以_numeric2_。 |
| `numeric1 / numeric2` | 返回_numeric1_除以_numeric2_。 |
| `POWER(numeric1, numeric2)` | 返回_numeric1_上升到_numeric2的幂_。 |
| `ABS(numeric)` | 返回_numeric_的绝对值。 |
| `MOD(numeric1, numeric2)` | 返回_numeric1_的余数（模数）除以_numeric2_。仅当_numeric1_为负数时，结果才为负数。 |
| `SQRT(numeric)` | 返回_数字的_平方根。 |
| `LN(numeric)` | 返回的自然对数（以e为底）_的数字_。 |
| `LOG10(numeric)` | 返回_数字_的基数10对数。 |
| `LOG2(numeric)` | 返回_数字_的基数2对数。 |
| `LOG(numeric2)` | 使用一个参数调用时，返回_numeric2_的自然对数。当使用两个参数调用时，此函数将_numeric2_的对数返回到基数_numeric1_。**注意：**目前，_numeric2_必须大于0且_numeric1_必须大于1。 |
| `LOG(numeric1, numeric2)` | |
| `EXP(numeric)` | 返回e提升到_数字_的幂。 |
| `CEIL(numeric)` | 将_数字_向上舍入，并返回大于或等于_numeric_的最小_数字_。 |
| `CEILING(numeric)` | |
| `FLOOR(numeric)` | 将_数字_向下舍入，并返回小于或等于_numeric_的最大_数字_。 |
| `SIN(numeric)` | 返回_数字_的正弦值。 |
| `COS(numeric)` | 返回_数字_的余弦值。 |
| `TAN(numeric)` | 返回_数字_的正切值。 |
| `COT(numeric)` | 返回_数字_的余切。 |
| `ASIN(numeric)` | 返回_数字的_反正弦值。 |
| `ACOS(numeric)` | 返回_数字的反_余弦值。 |
| `ATAN(numeric)` | 返回_数字的_反正切。 |
| `ATAN2(numeric1, numeric2)` | 返回坐标_（numeric1，numeric2）的_反正切。 |
| `DEGREES(numeric)` | 返回弧度_数字_的度数表示。 |
| `RADIANS(numeric)` | 返回度数_数字_的弧度表示。 |
| `SIGN(numeric)` | 返回_数字_的符号。 |
| `ROUND(numeric, integer)` | 返回舍入为_数字的__整数_小数_位数_。 |
| `PI` | 返回比pi更接近任何其他值的值。 |
| `E()` | 返回比e的任何其他值更接近的值。 |
| `RAND()` | 返回介于0.0（包括）和1.0（不包括）之间的伪随机双精度值。 |
| `RAND(integer)` | 使用初始种子_整数_返回介于0.0（含）和1.0（不包含）之间的伪随机双精度值。如果两个RAND函数具有相同的初始种子，则它们将返回相同的数字序列。 |
| `RAND_INTEGER(integer)` | 返回0（包括）和_整数_（不包括）之间的伪随机整数值。 |
| `RAND_INTEGER(integer1, integer2)` | 返回0（包括）之间的伪随机整数值和具有初始种子的指定值（不包括）。如果两个RAND_INTEGER函数具有相同的初始种子和绑定，则它们将返回相同的数字序列。 |
| `UUID()` | 根据RFC 4122类型4（伪随机生成的）UUID返回UUID（通用唯一标识符）字符串（例如，“3d3c68f7-f608-473f-b60c-b0c44ad4cc4e”）。使用加密强伪随机数生成器生成UUID。 |
| `BIN(integer)` | 以二进制格式返回_整数_的字符串表示形式。如果_integer_为NULL，则返回NULL。例如，`BIN(4)`返回'100'并`BIN(12)`返回'1100'。 |
| `HEX(numeric)` | 返回整数_数值_的字符串表示形式或十六进制格式的_字符串_。如果参数为NULL，则返回NULL。例如，数字20导致“14”，数字100导致“64”，字符串“hello，world”导致“68656C6C6F2C776F726C64”。 |
| `HEX(string) ` | |

| Arithmetic functions | Description |
| --- | --- |
| `+ NUMERIC` | Returns _NUMERIC_. |
| `- NUMERIC` | Returns negative _NUMERIC_. |
| `NUMERIC1 + NUMERIC2` | Returns _NUMERIC1_ plus _NUMERIC2_. |
| `NUMERIC1 - NUMERIC2` | Returns _NUMERIC1_ minus _NUMERIC2_. |
| `NUMERIC1 * NUMERIC2` | Returns _NUMERIC1_ multiplied by _NUMERIC2_. |
| `NUMERIC1 / NUMERIC2` | Returns _NUMERIC1_ divided by _NUMERIC2_. |
| `NUMERIC1.power(NUMERIC2)` | Returns _NUMERIC1_ raised to the power of _NUMERIC2_. |
| `NUMERIC.abs()` | Returns the absolute value of _NUMERIC_. |
| `NUMERIC1 % NUMERIC2` | Returns the remainder (modulus) of _NUMERIC1_ divided by _NUMERIC2_. The result is negative only if _numeric1_ is negative. |
| `NUMERIC.sqrt()` | Returns the square root of _NUMERIC_. |
| `NUMERIC.ln()` | Returns the natural logarithm (base e) of _NUMERIC_. |
| `NUMERIC.log10()` | Returns the base 10 logarithm of _NUMERIC_. |
| `NUMERIC.log2()` | Returns the base 2 logarithm of _NUMERIC_. |
| `NUMERIC1.log()` | When called without argument, returns the natural logarithm of _NUMERIC1_. When called with an argument, returns the logarithm of _NUMERIC1_ to the base _NUMERIC2_.**Note:** Currently, _NUMERIC1_ must be greater than 0 and _NUMERIC2_ must be greater than 1. |
| `NUMERIC1.log(NUMERIC2)` | |
| `NUMERIC.exp()` | Returns e raised to the power of _NUMERIC_. |
| `NUMERIC.ceil()` | Rounds _NUMERIC_ up, and returns the smallest number that is greater than or equal to _NUMERIC_. |
| `NUMERIC.floor()` | Rounds _NUMERIC_ down, and returns the largest number that is less than or equal to _NUMERIC_. |
| `NUMERIC.sin()` | Returns the sine of _NUMERIC_. |
| `NUMERIC.cos()` | Returns the cosine of _NUMERIC_. |
| `NUMERIC.tan()` | Returns the tangent of _NUMERIC_. |
| `NUMERIC.cot()` | Returns the cotangent of a _NUMERIC_. |
| `NUMERIC.asin()` | Returns the arc sine of _NUMERIC_. |
| `NUMERIC.acos()` | Returns the arc cosine of _NUMERIC_. |
| `NUMERIC.atan()` | Returns the arc tangent of _NUMERIC_. |
| `atan2(NUMERIC1, NUMERIC2)` | Returns the arc tangent of a coordinate _(NUMERIC1, NUMERIC2)_. |
| `NUMERIC.degrees()` | Returns the degree representation of a radian _NUMERIC_. |
| `NUMERIC.radians()` | Returns the radian representation of a degree _NUMERIC_. |
| `NUMERIC.sign()` | Returns the signum of _NUMERIC_. |
| `NUMERIC.round(INT)` | Returns a number rounded to _INT_ decimal places for _NUMERIC_. |
| `pi()` | Returns a value that is closer than any other values to pi. |
| `e()` | Returns a value that is closer than any other values to e. |
| `rand()` | Returns a pseudorandom double value between 0.0 (inclusive) and 1.0 (exclusive). |
| `rand(INTEGER)` | Returns a pseudorandom double value between 0.0 (inclusive) and 1.0 (exclusive) with an initial seed _INTEGER_. Two RAND functions will return identical sequences of numbers if they have the same initial seed. |
| `randInteger(INTEGER)` | Returns a pseudorandom integer value between 0 (inclusive) and _INTEGER_ (exclusive). |
| `randInteger(INTEGER1, INTEGER2)` | Returns a pseudorandom integer value between 0 (inclusive) and _INTEGER2_ (exclusive) with an initial seed _INTEGER1_. Two randInteger functions will return identical sequences of numbers if they have same initial seed and bound. |
| `uuid()` | Returns an UUID (Universally Unique Identifier) string (e.g., "3d3c68f7-f608-473f-b60c-b0c44ad4cc4e") according to RFC 4122 type 4 (pseudo randomly generated) UUID. The UUID is generated using a cryptographically strong pseudo random number generator. |
| `INTEGER.bin()` | Returns a string representation of _INTEGER_ in binary format. Returns NULL if _INTEGER_ is NULL.E.g., `4.bin()` returns "100" and `12.bin()` returns "1100". |
| `NUMERIC.hex()` | Returns a string representation of an integer _NUMERIC_ value or a _STRING_ in hex format. Returns NULL if the argument is NULL.E.g. a numeric 20 leads to "14", a numeric 100 leads to "64", a string "hello,world" leads to "68656C6C6F2C776F726C64". |
| `STRING.hex()` | |

| Arithmetic functions | Description |
| --- | --- |
| `+ NUMERIC` | Returns _NUMERIC_. |
| `- NUMERIC` | Returns negative _NUMERIC_. |
| `NUMERIC1 + NUMERIC2` | Returns _NUMERIC1_ plus _NUMERIC2_. |
| `NUMERIC1 - NUMERIC2` | Returns _NUMERIC1_ minus _NUMERIC2_. |
| `NUMERIC1 * NUMERIC2` | Returns _NUMERIC1_ multiplied by _NUMERIC2_. |
| `NUMERIC1 / NUMERIC2` | Returns _NUMERIC1_ divided by _NUMERIC2_. |
| `NUMERIC1.power(NUMERIC2)` | Returns _NUMERIC1_ raised to the power of _NUMERIC2_. |
| `NUMERIC.abs()` | Returns the absolute value of _NUMERIC_. |
| `NUMERIC1 % NUMERIC2` | Returns the remainder (modulus) of _NUMERIC1_ divided by _NUMERIC2_. The result is negative only if _numeric1_ is negative. |
| `NUMERIC.sqrt()` | Returns the square root of _NUMERIC_. |
| `NUMERIC.ln()` | Returns the natural logarithm (base e) of _NUMERIC_. |
| `NUMERIC.log10()` | Returns the base 10 logarithm of _NUMERIC_. |
| `NUMERIC.log2()` | Returns the base 2 logarithm of _NUMERIC_. |
| `NUMERIC1.log()` | When called without argument, returns the natural logarithm of _NUMERIC1_. When called with an argument, returns the logarithm of _NUMERIC1_ to the base _NUMERIC2_.**Note:** Currently, _NUMERIC1_ must be greater than 0 and _NUMERIC2_ must be greater than 1. |
| `NUMERIC1.log(NUMERIC2)` | |
| `NUMERIC.exp()` | Returns e raised to the power of _NUMERIC_. |
| `NUMERIC.ceil()` | Rounds _NUMERIC_ up, and returns the smallest number that is greater than or equal to _NUMERIC_. |
| `NUMERIC.floor()` | Rounds _NUMERIC_ down, and returns the largest number that is less than or equal to _NUMERIC_. |
| `NUMERIC.sin()` | Returns the sine of _NUMERIC_. |
| `NUMERIC.cos()` | Returns the cosine of _NUMERIC_. |
| `NUMERIC.tan()` | Returns the tangent of _NUMERIC_. |
| `NUMERIC.cot()` | Returns the cotangent of a _NUMERIC_. |
| `NUMERIC.asin()` | Returns the arc sine of _NUMERIC_. |
| `NUMERIC.acos()` | Returns the arc cosine of _NUMERIC_. |
| `NUMERIC.atan()` | Returns the arc tangent of _NUMERIC_. |
| `atan2(NUMERIC1, NUMERIC2)` | Returns the arc tangent of a coordinate _(NUMERIC1, NUMERIC2)_. |
| `NUMERIC.degrees()` | Returns the degree representation of a radian _NUMERIC_. |
| `NUMERIC.radians()` | Returns the radian representation of a degree _NUMERIC_. |
| `NUMERIC.sign()` | Returns the signum of _NUMERIC_. |
| `NUMERIC.round(INT)` | Returns a number rounded to _INT_ decimal places for _NUMERIC_. |
| `pi()` | Returns a value that is closer than any other values to pi. |
| `e()` | Returns a value that is closer than any other values to e. |
| `rand()` | Returns a pseudorandom double value between 0.0 (inclusive) and 1.0 (exclusive). |
| `rand(INTEGER)` | Returns a pseudorandom double value between 0.0 (inclusive) and 1.0 (exclusive) with an initial seed _INTEGER_. Two RAND functions will return identical sequences of numbers if they have the same initial seed. |
| `randInteger(INTEGER)` | Returns a pseudorandom integer value between 0 (inclusive) and _INTEGER_ (exclusive). |
| `randInteger(INTEGER1, INTEGER2)` | Returns a pseudorandom integer value between 0 (inclusive) and _INTEGER2_ (exclusive) with an initial seed _INTEGER1_. Two randInteger functions will return identical sequences of numbers if they have same initial seed and bound. |
| `uuid()` | Returns an UUID (Universally Unique Identifier) string (e.g., "3d3c68f7-f608-473f-b60c-b0c44ad4cc4e") according to RFC 4122 type 4 (pseudo randomly generated) UUID. The UUID is generated using a cryptographically strong pseudo random number generator. |
| `INTEGER.bin()` | Returns a string representation of _INTEGER_ in binary format. Returns NULL if _INTEGER_ is NULL.E.g., `4.bin()` returns "100" and `12.bin()` returns "1100". |
| `NUMERIC.hex()` | Returns a string representation of an integer _NUMERIC_ value or a _STRING_ in hex format. Returns NULL if the argument is NULL.E.g. a numeric 20 leads to "14", a numeric 100 leads to "64", a string "hello,world" leads to "68656C6C6F2C776F726C64". |
| `STRING.hex()` | |

### 字符串函数

*   [**SQL**](#tab_SQL_3)
*   [**Java**](#tab_java_3)
*   [**Scala**](#tab_scala_3)

| 字符串函数 | 描述 |
| --- | --- |
| `string1 &#124;&#124; string2` | 返回_string1_和_string2_的串联。 |
| `CHAR_LENGTH(string)` | 返回_string中_的字符数。 |
| `CHARACTER_LENGTH(string)` | |
| `UPPER(string)` | 以大写形式返回_字符串_。 |
| `LOWER(string)` | 以小写形式返回_字符串_。 |
| `POSITION(string1 IN string2)` | 返回的第一次出现的位置（从1开始）_字符串1_在_字符串2_ ; 如果在_string2中_找不到_string1，_则返回0 。 |
| `TRIM([ BOTH &#124; LEADING &#124; TRAILING ] string1 FROM string2)` | 返回一个字符串，用于从_string2_中删除前导和/或尾随字符_string1_。默认情况下，两侧的空格都被删除。 |
| `LTRIM(string)` | 返回一个字符串，从去除左空格_的字符串_。例如，`LTRIM(' This is a test String.')`返回“This is a test String。”。 |
| `RTRIM(string)` | 返回一个字符串，从去除右方的空格_字符串_。例如，`RTRIM('This is a test String. ')`返回“This is a test String。”。 |
| `REPEAT(string, integer)` | 返回一个重复基本_字符串_ _整_数倍的_字符串_。例如，`REPEAT('This is a test String.', 2)`返回“这是一个测试字符串。这是一个测试字符串。”。 |
| `OVERLAY(string1 PLACING string2 FROM integer1 [ FOR integer2 ])` | 返回替换字符串_整数2_（_字符串2_通过默认的长度）的字符_字符串1_与_字符串2_从位置_整数1_。例如，`OVERLAY('This is an old string' PLACING ' new' FROM 10 FOR 5)`返回“这是一个新字符串” |
| `SUBSTRING(string FROM integer1 [ FOR integer2 ])` | 返回从位置_integer1_开始的_字符串_的子_字符串_，其长度为_integer2_（默认情况下为结尾）。 |
| `INITCAP(string)` | 返回一种新形式的_字符串_，每个单词的第一个字符转换为大写，其余字符转换为小写。这里的单词意味着一系列字母数字字符。 |
| `CONCAT(string1, string2,...)` | 返回连接_string1，string2，..._的字符串。如果任何参数为NULL，则返回NULL。例如，`CONCAT('AA', 'BB', 'CC')`返回“AABBCC”。 |
| `CONCAT_WS(string1, string2, string3,...)` | 返回一个字符串，用于将_string2，string3，..._与分隔符_string1连接起来_。在要连接的字符串之间添加分隔符。返回NULL如果_string1_为NULL。与之相比`CONCAT()`，`CONCAT_WS()`自动跳过NULL参数。例如，`CONCAT_WS('~', 'AA', NULL, 'BB', '', 'CC')`返回“AA~BB ~~ CC”。 |
| `LPAD(string1, integer, string2)` | 返回从_string1_左侧填充_string2_到_整数_字符长度的新字符串。如果_string1_的长度小于_整数_，则返回_string1_缩短为_整数_字符。例如，`LPAD('hi',4,'??')`返回“?? hi”; `LPAD('hi',1,'??')`返回“h”。 |
| `RPAD(string1, integer, string2)` | 返回从_string1_右侧填充_string2_到_整数_字符长度的新字符串。如果_string1_的长度小于_整数_，则返回_string1_缩短为_整数_字符。例如，`RPAD('hi',4,'??')`返回“hi ??”，`RPAD('hi',1,'??')`返回“h”。 |
| `FROM_BASE64(string)` | 返回_string_的base64解码结果; 如果_string_为NULL，则返回NULL。例如，`FROM_BASE64('aGVsbG8gd29ybGQ=')`返回“hello world”。 |
| `TO_BASE64(string)` | 从_string_返回base64编码的结果; 如果_string_为NULL，则返回NULL。例如，`TO_BASE64('hello world')`返回“aGVsbG8gd29ybGQ =”。 |

| String functions | Description |
| --- | --- |
| `STRING1 + STRING2` | Returns the concatenation of _STRING1_ and _STRING2_. |
| `STRING.charLength()` | Returns the number of characters in _STRING_. |
| `STRING.upperCase()` | Returns _STRING_ in uppercase. |
| `STRING.lowerCase()` | Returns _STRING_ in lowercase. |
| `STRING1.position(STRING2)` | Returns the position (start from 1) of the first occurrence of _STRING1_ in _STRING2_; returns 0 if _STRING1_ cannot be found in _STRING2_. |
| `STRING1.trim(LEADING, STRING2)` | Returns a string that removes leading and/or trailing characters _STRING2_ from _STRING1_. By default, whitespaces at both sides are removed. |
| `STRING1.trim(TRAILING, STRING2)` | |
| `STRING1.trim(BOTH, STRING2)` | |
| `STRING1.trim(BOTH)` | |
| `STRING1.trim()` | |
| `STRING.ltrim()` | Returns a string that removes the left whitespaces from _STRING_.E.g., `' This is a test String.'.ltrim()` returns "This is a test String.". |
| `STRING.rtrim()` | Returns a string that removes the right whitespaces from _STRING_.E.g., `'This is a test String. '.rtrim()` returns "This is a test String.". |
| `STRING.repeat(INT)` | Returns a string that repeats the base _STRING_ _INT_ times.E.g., `'This is a test String.'.repeat(2)` returns "This is a test String.This is a test String.". |
| `STRING1.overlay(STRING2, INT1)` | Returns a string that replaces _INT2_ (_STRING2_'s length by default) characters of _STRING1_ with _STRING2_ from position _INT1_.E.g., `'xxxxxtest'.overlay('xxxx', 6)` returns "xxxxxxxxx"; `'xxxxxtest'.overlay('xxxx', 6, 2)` returns "xxxxxxxxxst". |
| `STRING1.overlay(STRING2, INT1, INT2)` | |
| `STRING.substring(INT1)` | Returns a substring of _STRING_ starting from position _INT1_ with length _INT2_ (to the end by default). |
| `STRING.substring(INT1, INT2)` | |
| `STRING.initCap()` | Returns a new form of _STRING_ with the first character of each word converted to uppercase and the rest characters to lowercase. Here a word means a sequences of alphanumeric characters. |
| `concat(STRING1, STRING2, ...)` | Returns a string that concatenates _STRING1, STRING2, ..._. Returns NULL if any argument is NULL.E.g., `concat('AA', 'BB', 'CC')` returns "AABBCC". |
| `concat_ws(STRING1, STRING2, STRING3, ...)` | Returns a string that concatenates _STRING2, STRING3, ..._ with a separator _STRING1_. The separator is added between the strings to be concatenated. Returns NULL If _STRING1_ is NULL. Compared with `concat()`, `concat_ws()` automatically skips NULL arguments.E.g., `concat_ws('~', 'AA', Null(STRING), 'BB', '', 'CC')` returns "AA~BB~~CC". |
| `STRING1.lpad(INT, STRING2)` | Returns a new string from _STRING1_ left-padded with _STRING2_ to a length of _INT_ characters. If the length of _STRING1_ is shorter than _INT_, returns _STRING1_ shortened to _INT_ characters.E.g., `'hi'.lpad(4, '??')` returns "??hi"; `'hi'.lpad(1, '??')` returns "h". |
| `STRING1.rpad(INT, STRING2)` | Returns a new string from _STRING1_ right-padded with _STRING2_ to a length of _INT_ characters. If the length of _STRING1_ is shorter than _INT_, returns _STRING1_ shortened to _INT_ characters.E.g., `'hi'.rpad(4, '??')` returns "hi??"; `'hi'.rpad(1, '??')` returns "h". |
| `STRING.fromBase64()` | Returns the base64-decoded result from _STRING_; returns NULL if _STRING_ is NULL.E.g., `'aGVsbG8gd29ybGQ='.fromBase64()` returns "hello world". |
| `STRING.toBase64()` | Returns the base64-encoded result from _STRING_; returns NULL if _STRING_ is NULL.E.g., `'hello world'.toBase64()` returns "aGVsbG8gd29ybGQ=". |

| String functions | Description |
| --- | --- |
| `STRING1 + STRING2` | Returns the concatenation of _STRING1_ and _STRING2_. |
| `STRING.charLength()` | Returns the number of characters in _STRING_. |
| `STRING.upperCase()` | Returns _STRING_ in uppercase. |
| `STRING.lowerCase()` | Returns _STRING_ in lowercase. |
| `STRING1.position(STRING2)` | Returns the position (start from 1) of the first occurrence of _STRING1_ in _STRING2_; returns 0 if _STRING1_ cannot be found in _STRING2_. |
| `STRING.trim(leading = true, trailing = true, character = " ")` | Returns a string that removes leading and/or trailing characters from _STRING_. |
| `STRING.ltrim()` | Returns a string that removes the left whitespaces from _STRING_.E.g., `" This is a test String.".ltrim()` returns "This is a test String.". |
| `STRING.rtrim()` | Returns a string that removes the right whitespaces from _STRING_.E.g., `"This is a test String. ".rtrim()` returns "This is a test String.". |
| `STRING.repeat(INT)` | Returns a string that repeats the base _STRING_ _INT_ times.E.g., `"This is a test String.".repeat(2)` returns "This is a test String.This is a test String.". |
| `STRING1.overlay(STRING2, INT1)` | Returns a string that replaces _INT2_ (_STRING2_'s length by default) characters of _STRING1_ with _STRING2_ from position _INT1_.E.g., `"xxxxxtest".overlay("xxxx", 6)` returns "xxxxxxxxx"; `"xxxxxtest".overlay("xxxx", 6, 2)` returns "xxxxxxxxxst". |
| `STRING1.overlay(STRING2, INT1, INT2)` | |
| `STRING.substring(INT1)` | Returns a substring of _STRING_ starting from position _INT1_ with length _INT2_ (to the end by default). |
| `STRING.substring(INT1, INT2)` | |
| `STRING.initCap()` | Returns a new form of _STRING_ with the first character of each word converted to uppercase and the rest characters to lowercase. Here a word means a sequences of alphanumeric characters. |
| `concat(STRING1, STRING2, ...)` | Returns a string that concatenates _STRING1, STRING2, ..._. Returns NULL if any argument is NULL.E.g., `concat("AA", "BB", "CC")` returns "AABBCC". |
| `concat_ws(STRING1, STRING2, STRING3, ...)` | Returns a string that concatenates _STRING2, STRING3, ..._ with a separator _STRING1_. The separator is added between the strings to be concatenated. Returns NULL If _STRING1_ is NULL. Compared with `concat()`, `concat_ws()` automatically skips NULL arguments.E.g., `concat_ws("~", "AA", Null(Types.STRING), "BB", "", "CC")` returns "AA~BB~~CC". |
| `STRING1.lpad(INT, STRING2)` | Returns a new string from _STRING1_ left-padded with _STRING2_ to a length of _INT_ characters. If the length of _STRING1_ is shorter than _INT_, returns _STRING1_ shortened to _INT_ characters.E.g., `"hi".lpad(4, "??")` returns "??hi"; `"hi".lpad(1, "??")` returns "h". |
| `STRING1.rpad(INT, STRING2)` | Returns a new string from _STRING1_ right-padded with _STRING2_ to a length of _INT_ characters. If the length of _STRING1_ is shorter than _INT_, returns _STRING1_ shortened to _INT_ characters.E.g., `"hi".rpad(4, "??")` returns "hi??"; `"hi".rpad(1, "??")` returns "h". |
| `STRING.fromBase64()` | Returns the base64-decoded result from _STRING_; returns null If _STRING_ is NULL.E.g., `"aGVsbG8gd29ybGQ=".fromBase64()` returns "hello world". |
| `STRING.toBase64()` | Returns the base64-encoded result from _STRING_; returns NULL if _STRING_ is NULL.E.g., `"hello world".toBase64()` returns "aGVsbG8gd29ybGQ=". |

### 时间函数

*   [**SQL**](#tab_SQL_4)
*   [**Java**](#tab_java_4)
*   [**Scala**](#tab_scala_4)

| 时间函数 | 描述 |
| --- | --- |
| `DATE string` | 返回以“yyyy-MM-dd”形式从_字符串_解析的SQL日期。 |
| `TIME string` | 返回以“HH：mm：ss”形式从_字符串_解析的SQL时间。 |
| `TIMESTAMP string` | 返回以_字符串_形式解析的SQL时间戳，格式为“yyyy-MM-dd HH：mm：ss [.SSS]”。 |
| `INTERVAL string range` | 对于SQL间隔为毫秒，以“dd hh：mm：ss.fff”形式解析间隔_字符串_，对于SQL间隔月，解析“yyyy-mm”。的间隔范围可以是`DAY`，`MINUTE`，`DAY TO HOUR`，或`DAY TO SECOND`的毫秒时间间隔; `YEAR`或`YEAR TO MONTH`间隔数月。例如`INTERVAL '10 00:00:00.004' DAY TO SECOND`，`INTERVAL '10' DAY`或者`INTERVAL '2-10' YEAR TO MONTH`返回的时间间隔。 |
| `CURRENT_DATE` | 返回UTC时区中的当前SQL日期。 |
| `CURRENT_TIME` | 返回UTC时区中的当前SQL时间。 |
| `CURRENT_TIMESTAMP` | 返回UTC时区中的当前SQL时间戳。 |
| `LOCALTIME` | 返回本地时区的当前SQL时间。 |
| `LOCALTIMESTAMP` | 返回本地时区的当前SQL时间戳。 |
| `EXTRACT(timeintervalunit FROM temporal)` | 返回从_temporal_的_timeintervalitit_部分提取的long值。例如，`EXTRACT(DAY FROM DATE '2006-06-05')`返回5。 |
| `YEAR(date)` | 返回SQL日期_日期_的年份。相当于EXTRACT（从日期开始）。例如，`YEAR(DATE '1994-09-27')`返回1994年。 |
| `QUARTER(date)` | 从SQL返回日期一年的季度（1和4之间的整数）_日期_。相当于`EXTRACT(QUARTER FROM date)`。例如，`QUARTER(DATE '1994-09-27')`返回3。 |
| `MONTH(date)` | 从SQL日期_日期_返回一年中的月份（1到12之间的整数）。相当于`EXTRACT(MONTH FROM date)`。例如，`MONTH(DATE '1994-09-27')`返回9。 |
| `WEEK(date)` | 从SQL date _日期_返回一年中的一周（1到53之间的整数）。相当于`EXTRACT(WEEK FROM date)`。例如，`WEEK(DATE '1994-09-27')`返回39。 |
| `DAYOFYEAR(date)` | 返回一年的从SQL日期当天（1和366之间的整数）_日期_。相当于`EXTRACT(DOY FROM date)`。例如，`DAYOFYEAR(DATE '1994-09-27')`返回270。 |
| `DAYOFMONTH(date)` | 从SQL日期_日期_返回一个月中的某一天（1到31之间的整数）。相当于`EXTRACT(DAY FROM date)`。例如，`DAYOFMONTH(DATE '1994-09-27')`返回27。 |
| `DAYOFWEEK(date)` | 从SQL date _date_返回一周中的星期几（1到7之间的整数;星期日= 1）`EXTRACT(DOW FROM date)`。等效于。例如，`DAYOFWEEK(DATE '1994-09-27')`返回3。 |
| `HOUR(timestamp)` | 从SQL时间_戳记时间戳_返回一天中的小时（0到23之间的整数）。相当于`EXTRACT(HOUR FROM timestamp)`。例如，`HOUR(TIMESTAMP '1994-09-27 13:14:15')`返回13。 |
| `MINUTE(timestamp)` | 从SQL时间_戳记时间戳_返回一小时的分钟（0到59之间的整数）。相当于`EXTRACT(MINUTE FROM timestamp)`。例如，`MINUTE(TIMESTAMP '1994-09-27 13:14:15')`返回14。 |
| `SECOND(timestamp)` | 从SQL时间戳返回第二分钟（0到59之间的整数）。相当于`EXTRACT(SECOND FROM timestamp)`。例如，`SECOND(TIMESTAMP '1994-09-27 13:14:15')`返回15。 |
| `FLOOR(timepoint TO timeintervalunit)` | 返回将_时间点_向下_舍_入到时间单位_timeintervalunit的值_。例如，`FLOOR(TIME '12:44:31' TO MINUTE)`返回12:44:00。 |
| `CEIL(timepoint TO timeintervalunit)` | 返回一个将_时间点__舍_入到时间单位_timeintervalunit的值_。例如，`CEIL(TIME '12:44:31' TO MINUTE)`返回12:45:00。 |
| `(timepoint1, temporal1) OVERLAPS (timepoint2, temporal2)` | 如果由（_timepoint1_，_temporal1_）和（_timepoint2_，_temporal2_）定义的两个时间间隔重叠，则返回TRUE 。时间值可以是时间点或时间间隔。例如，`(TIME '2:55:00', INTERVAL '1' HOUR) OVERLAPS (TIME '3:30:00', INTERVAL '2' HOUR)`返回TRUE; `(TIME '9:00:00', TIME '10:00:00') OVERLAPS (TIME '10:15:00', INTERVAL '3' HOUR)`返回FALSE。 |
| `DATE_FORMAT(timestamp, string)` | 返回使用指定格式_字符串_格式化_时间戳的__字符串_。格式规范在[Date Format Specifier表中给出](#date-format-specifiers)。 |
| `TIMESTAMPADD(unit, interval, timevalue)` | 返回一个新的时间值，它将（带符号）整数时间间隔添加到_timevalue_。为单位_的时间间隔_是由单元参数，它应为以下值中的一个给定的：`SECOND`，`MINUTE`，`HOUR`，`DAY`，`WEEK`，`MONTH`，`QUARTER`，或`YEAR`。例如，`TIMESTAMPADD(WEEK, 1, DATE '2003-01-02')`退货`2003-01-09`。 |

| Temporal functions | Description |
| --- | --- |
| `STRING.toDate()` | Returns a SQL date parsed from _STRING_ in form of "yyyy-MM-dd". |
| `STRING.toTime()` | Returns a SQL time parsed from _STRING_ in form of "HH:mm:ss". |
| `STRING.toTimestamp()` | Returns a SQL timestamp parsed from _STRING_ in form of "yyyy-MM-dd HH:mm:ss[.SSS]". |
| `NUMERIC.year` | Creates an interval of months for _NUMERIC_ years. |
| `NUMERIC.years` | |
| `NUMERIC.month` | Creates an interval of _NUMERIC_ months. |
| `NUMERIC.months` | |
| `NUMERIC.day` | Creates an interval of milliseconds for _NUMERIC_ days. |
| `NUMERIC.days` | |
| `NUMERIC.hour` | Creates an interval of milliseconds for _NUMERIC_ hours. |
| `NUMERIC.hours` | |
| `NUMERIC.minute` | Creates an interval of milliseconds for _NUMERIC_ minutes. |
| `NUMERIC.minutes` | |
| `NUMERIC.second` | Creates an interval of milliseconds for _NUMERIC_ seconds. |
| `NUMERIC.seconds` | |
| `NUMERIC.milli` | Creates an interval of _NUMERIC_ milliseconds. |
| `NUMERIC.millis` | |
| `currentDate()` | Returns the current SQL date in the UTC time zone. |
| `currentTime()` | Returns the current SQL time in the UTC time zone. |
| `currentTimestamp()` | Returns the current SQL timestamp in the UTC time zone. |
| `localTime()` | Returns the current SQL time in local time zone. |
| `localTimestamp()` | Returns the current SQL timestamp in local time zone. |
| `TEMPORAL.extract(TIMEINTERVALUNIT)` | Returns a long value extracted from the _TIMEINTERVALUNIT_ part of _temporal_.E.g., `'2006-06-05'.toDate.extract(DAY)` returns 5; `'2006-06-05'.toDate.extract(QUARTER)` returns 2. |
| `TIMEPOINT.floor(TIMEINTERVALUNIT)` | Returns a value that rounds _TIMEPOINT_ down to the time unit _TIMEINTERVALUNIT_.E.g., `'12:44:31'.toDate.floor(MINUTE)` returns 12:44:00. |
| `TIMEPOINT.ceil(TIMEINTERVALUNIT)` | Returns a value that rounds _TIMEPOINT_ up to the time unit _TIMEINTERVALUNIT_.E.g., `'12:44:31'.toTime.floor(MINUTE)` returns 12:45:00. |
| `temporalOverlaps(TIMEPOINT1, TEMPORAL1, TIMEPOINT2, TEMPORAL2)` | Returns TRUE if two time intervals defined by (_TIMEPOINT1_, _TEMPORAL1_) and (_TIMEPOINT2_, _TEMPORAL2_) overlap. The temporal values could be either a time point or a time interval.E.g., `temporalOverlaps('2:55:00'.toTime, 1.hour, '3:30:00'.toTime, 2.hour)` returns TRUE. |
| `dateFormat(TIMESTAMP, STRING)` | Returns a string that formats _TIMESTAMP_ with a specified format _STRING_. The format specification is given in the [Date Format Specifier table](#date-format-specifiers).E.g., `dateFormat(ts, '%Y, %d %M')` results in strings formatted as "2017, 05 May". |

| Temporal functions | Description |
| --- | --- |
| `STRING.toDate` | Returns a SQL date parsed from _STRING_ in form of "yyyy-MM-dd". |
| `STRING.toTime` | Returns a SQL time parsed from _STRING_ in form of "HH:mm:ss". |
| `STRING.toTimestamp` | Returns a SQL timestamp parsed from _STRING_ in form of "yyyy-MM-dd HH:mm:ss[.SSS]". |
| `NUMERIC.year` | Creates an interval of months for _NUMERIC_ years. |
| `NUMERIC.years` | |
| `NUMERIC.month` | Creates an interval of _NUMERIC_ months. |
| `NUMERIC.months` | |
| `NUMERIC.day` | Creates an interval of milliseconds for _NUMERIC_ days. |
| `NUMERIC.days` | |
| `NUMERIC.hour` | Creates an interval of milliseconds for _NUMERIC_ hours. |
| `NUMERIC.hours` | |
| `NUMERIC.minute` | Creates an interval of milliseconds for _NUMERIC_ minutes. |
| `NUMERIC.minutes` | |
| `NUMERIC.second` | Creates an interval of milliseconds for _NUMERIC_ seconds. |
| `NUMERIC.seconds` | |
| `NUMERIC.milli` | Creates an interval of _NUMERIC_ milliseconds. |
| `NUMERIC.millis` | |
| `currentDate()` | Returns the current SQL date in the UTC time zone. |
| `currentTime()` | Returns the current SQL time in the UTC time zone. |
| `currentTimestamp()` | Returns the current SQL timestamp in the UTC time zone. |
| `localTime()` | Returns the current SQL time in local time zone. |
| `localTimestamp()` | Returns the current SQL timestamp in local time zone. |
| `TEMPORAL.extract(TIMEINTERVALUNIT)` | Returns a long value extracted from the _TIMEINTERVALUNIT_ part of _temporal_.E.g., `"2006-06-05".toDate.extract(TimeIntervalUnit.DAY)` returns 5; `"2006-06-05".toDate.extract(QUARTER)` returns 2. |
| `TIMEPOINT.floor(TIMEINTERVALUNIT)` | Returns a value that rounds _TIMEPOINT_ down to the time unit _TIMEINTERVALUNIT_.E.g., `"12:44:31".toDate.floor(TimeIntervalUnit.MINUTE)` returns 12:44:00. |
| `TIMEPOINT.ceil(TIMEINTERVALUNIT)` | Returns a value that rounds _TIMEPOINT_ up to the time unit _TIMEINTERVALUNIT_.E.g., `"12:44:31".toTime.floor(TimeIntervalUnit.MINUTE)` returns 12:45:00. |
| `temporalOverlaps(TIMEPOINT1, TEMPORAL1, TIMEPOINT2, TEMPORAL2)` | Returns TRUE if two time intervals defined by (_TIMEPOINT1_, _TEMPORAL1_) and (_TIMEPOINT2_, _TEMPORAL2_) overlap. The temporal values could be either a time point or a time interval.E.g., `temporalOverlaps("2:55:00".toTime, 1.hour, "3:30:00".toTime, 2.hour)` returns TRUE. |
| `dateFormat(TIMESTAMP, STRING)` | Returns a string that formats _TIMESTAMP_ with a specified format _STRING_. The format specification is given in the [Date Format Specifier table](#date-format-specifiers).E.g., `dateFormat('ts, "%Y, %d %M")` results in strings formatted as "2017, 05 May". |

### 条件函数

*   [**SQL**](#tab_SQL_5)
*   [**Java**](#tab_java_5)
*   [**Scala**](#tab_scala_5)

| 条件函数 | 描述 |
| --- | --- |
| <code>CASE value<br>WHEN value1_1 [, value1_2 ]* THEN result1<br>[ WHEN value2_1 [, value2_2 ]* THEN result2 ]*<br>[ ELSE resultZ ]<br>END</code> | 当第一个时间_值_包含在（_valueX_1，valueX_2，..._）中时返回_resultX_。如果没有值匹配，则返回_resultZ（_如果已提供），否则返回NULL。 |
| <code>CASE<br>WHEN condition1 THEN result1<br>[ WHEN condition2 THEN result2 ]*<br>[ ELSE resultZ ]<br>END</code> | 满足第一个_conditionX_时返回_resultX_。如果没有满足条件，则返回_resultZ（_如果已提供），否则返回NULL。 |
| `NULLIF(value1, value2)` | 如果_value1_等于_value2_，则返回NULL ; 否则返回_value1_。例如，`NULLIF(5, 5)`返回NULL; `NULLIF(5, 0)`返回5。 |
| `COALESCE(value1, value2 [, value3 ]* )` | 从_value1，value2，..._返回非NULL的第一个值。例如，`COALESCE(NULL, 5)`返回5。 |

| Conditional functions | Description |
| --- | --- |
| `BOOLEAN.?(VALUE1, VALUE2)` | Returns _VALUE1_ if _BOOLEAN_ evaluates to TRUE; returns _VALUE2_ otherwise.E.g., `(42 &gt; 5).?('A', 'B')` returns "A". |

| Conditional functions | Description |
| --- | --- |
| `BOOLEAN.?(VALUE1, VALUE2)` | Returns _VALUE1_ if _BOOLEAN_ evaluates to TRUE; returns _VALUE2_ otherwise.E.g., `(42 &gt; 5).?("A", "B")` returns "A". |

### 类型转换函数

*   [**SQL**](#tab_SQL_6)
*   [**Java**](#tab_java_6)
*   [**Scala**](#tab_scala_6)

| 类型转换函数 | 描述 |
| --- | --- |
| `CAST(value AS type)` | 返回要转换为类型_类型_的新_值_。请在[此处](sql.html#data-types)查看支持的类型。[](sql.html#data-types)例如，`CAST('42' AS INT)`返回42。 |

| Type conversion functions | Description |
| --- | --- |
| `ANY.cast(TYPE)` | Returns a new _ANY_ being cast to type _TYPE_. See the supported types [here](tableApi.html#data-types).E.g., `'42'.cast(INT)` returns 42. |

| Type conversion functions | Description |
| --- | --- |
| `ANY.cast(TYPE)` | Returns a new _ANY_ being cast to type _TYPE_. See the supported types [here](tableApi.html#data-types).E.g., `"42".cast(Types.INT)` returns 42. |

### 收集函数

*   [**SQL**](#tab_SQL_7)
*   [**Java**](#tab_java_7)
*   [**Scala**](#tab_scala_7)

| 收集函数 | 描述 |
| --- | --- |
| `CARDINALITY(array)` | 返回_数组中_的数据元数。 |
| `array ‘[’ integer ‘]’` | 在返回位置处的数据元_整数_在_阵列_。索引从1开始。 |
| `ELEMENT(array)` | 返回_数组_的唯一数据元（其基数应为1）; 如果_数组_为空，则返回NULL 。如果_数组_有多个数据元，则抛出异常。 |
| `CARDINALITY(map)` | 返回_map中_的条目数。 |
| `map ‘[’ value ‘]’` | 返回键指定的值，_值_的_Map_。 |

| Collection functions | Description |
| --- | --- |
| `ARRAY.cardinality()` | Returns the number of elements in _ARRAY_. |
| `ARRAY.at(INT)` | Returns the element at position _INT_ in _ARRAY_. The index starts from 1. |
| `ARRAY.element()` | Returns the sole element of _ARRAY_ (whose cardinality should be one); returns NULL if _ARRAY_ is empty. Throws an exception if _ARRAY_ has more than one element. |
| `MAP.cardinality()` | Returns the number of entries in _MAP_. |
| `MAP.at(ANY)` | Returns the value specified by key _ANY_ in _MAP_. |

| Collection functions | Description |
| --- | --- |
| `ARRAY.cardinality()` | Returns the number of elements in _ARRAY_. |
| `ARRAY.at(INT)` | Returns the element at position _INT_ in _ARRAY_. The index starts from 1. |
| `ARRAY.element()` | Returns the sole element of _ARRAY_ (whose cardinality should be one); returns NULL if _ARRAY_ is empty. Throws an exception if _ARRAY_ has more than one element. |
| `MAP.cardinality()` | Returns the number of entries in _MAP_. |
| `MAP.at(ANY)` | Returns the value specified by key _ANY_ in _MAP_. |

### Value构建函数

*   [**SQL**](#tab_SQL_8)
*   [**Java**](#tab_java_8)
*   [**Scala**](#tab_scala_8)

| Value建构函数 | 描述 |
| --- | --- |
| `ROW(value1, [, value2]*)` | 返回从值列表（_value1，value2，_ ...）创建的行。 |
| `(value1, [, value2]*)` | |
| `ARRAY ‘[’ value1 [, value2 ]* ‘]’` | 返回从值列表（_value1，value2_，...）创建的数组。 |
| `MAP ‘[’ value1, value2 [, value3, value4 ]* ‘]’` | 返回从键值对列表（（_value1，value2_），_（value3，value4）_，...）创建的映射。 |

| Value constructor functions | Description |
| --- | --- |
| `row(ANY1, ANY2, ...)` | Returns a row created from a list of object values (_ANY1, ANY2_, ...). Row is composite type that can be access via [value access functions](#value-access-functions). |
| `array(ANY1, ANY2, ...)` | Returns an array created from a list of object values (_ANY1, ANY2_, ...). |
| `map(ANY1, ANY2, ANY3, ANY4, ...)` | Returns a map created from a list of key-value pairs ((_ANY1, ANY2_), _(ANY3, ANY4)_, ...). |
| `NUMERIC.rows` | Creates a _NUMERIC_ interval of rows (commonly used in window creation). |

| Value constructor functions | Description |
| --- | --- |
| `row(ANY1, ANY2, ...)` | Returns a row created from a list of object values (_ANY1, ANY2_, ...). Row is composite type that can be access via [value access functions](#value-access-functions). |
| `array(ANY1, ANY2, ...)` | Returns an array created from a list of object values (_ANY1, ANY2_, ...). |
| `map(ANY1, ANY2, ANY3, ANY4, ...)` | Returns a map created from a list of key-value pairs ((_ANY1, ANY2_), _(ANY3, ANY4)_, ...). |
| `NUMERIC.rows` | Creates a _NUMERIC_ interval of rows (commonly used in window creation). |

### Value访问函数

*   [**SQL**](#tab_SQL_9)
*   [**Java**](#tab_java_9)
*   [**Scala**](#tab_scala_9)

| Value访问函数 | 描述 |
| --- | --- |
| `tableName.compositeType.field` | 按名称从Flink复合类型（例如，Tuple，POJO）返回字段的值。 |
| `tableName.compositeType.*` | 返回Flink复合类型（例如，Tuple，POJO）的平面表示，该复合类型将其每个直接子类型转换为单独的字段。在大多数情况下，平面表示的字段与原始字段的命名方式类似，但使用美元分隔符（例如`mypojo$mytuple$f0`）。 |

| Value access functions | Description |
| --- | --- |
| `COMPOSITE.get(STRING)` | Returns the value of a field from a Flink composite type (e.g., Tuple, POJO) by name or index.E.g., `pojo.get('myField')` or `tuple.get(0)`. |
| `COMPOSITE.get(INT)` | |
| `ANY.flatten()` | Returns a flat representation of a Flink composite type (e.g., Tuple, POJO) that converts each of its direct subtype into a separate field. In most cases the fields of the flat representation are named similarly to the original fields but with a dollar separator (e.g., `mypojo$mytuple$f0`). |

| Value access functions | Description |
| --- | --- |
| `COMPOSITE.get(STRING)` | Returns the value of a field from a Flink composite type (e.g., Tuple, POJO) by name or index.E.g., `'pojo.get("myField")` or `'tuple.get(0)`. |
| `COMPOSITE.get(INT)` | |
| `ANY.flatten()` | Returns a flat representation of a Flink composite type (e.g., Tuple, POJO) that converts each of its direct subtype into a separate field. In most cases the fields of the flat representation are named similarly to the original fields but with a dollar separator (e.g., `mypojo$mytuple$f0`). |

### 分组函数

*   [**SQL**](#tab_SQL_10)
*   [**Java**](#tab_Java_10)
*   [**Scala**](#tab_Scala_10)

| 分组函数 | 描述 |
| --- | --- |
| `GROUP_ID()` | 返回唯一标识分组键组合的整数。 |
| `GROUPING(expression1 [, expression2]* )` | 返回给定分组表达式的位向量。 |
| `GROUPING_ID(expression1 [, expression2]* )` | |

| Grouping functions | Description |
| --- | --- |

| Grouping functions | Description |
| --- | --- |

### 散列函数

*   [**SQL**](#tab_SQL_11)
*   [**Java**](#tab_java_11)
*   [**Scala**](#tab_scala_11)

| 散列函数 | 描述 |
| --- | --- |
| `MD5(string)` | 将_字符串_的MD5哈希值作为32个十六进制数字的_字符串_返回; 如果_string_为NULL，则返回NULL。 |
| `SHA1(string)` | 以40个十六进制数字的_字符串_形式返回_字符串_的SHA-1哈希值; 如果_string_为NULL，则返回NULL。 |
| `SHA224(string)` | 返回_字符串_的SHA-224哈希值，作为56个十六进制数字的字符串; 如果_string_为NULL，则返回NULL。 |
| `SHA256(string)` | 以64个十六进制数字的_字符串_形式返回_字符串_的SHA-256哈希值; 如果_string_为NULL，则返回NULL。 |
| `SHA384(string)` | 返回_字符串_的SHA-384哈希值，作为96个十六进制数字的字符串; 如果_string_为NULL，则返回NULL。 |
| `SHA512(string)` | 返回_字符串_的SHA-512哈希值，作为128个十六进制数字的字符串; 如果_string_为NULL，则返回NULL。 |
| `SHA2(string, hashLength)` | 使用SHA-2系列散列函数（SHA-224，SHA-256，SHA-384或SHA-512）返回散列。第一个参数_字符串_是要散列的字符串，第二个参数_hashLength_是结果的位长度（_224,256,384_或512）。如果_string_或_hashLength_为NULL，则返回NULL。 |

| Hash functions | Description |
| --- | --- |
| `STRING.md5()` | Returns the MD5 hash of _STRING_ as a string of 32 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha1()` | Returns the SHA-1 hash of _STRING_ as a string of 40 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha224()` | Returns the SHA-224 hash of _STRING_ as a string of 56 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha256()` | Returns the SHA-256 hash of _STRING_ as a string of 64 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha384()` | Returns the SHA-384 hash of _STRING_ as a string of 96 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha512()` | Returns the SHA-512 hash of _STRING_ as a string of 128 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha2(INT)` | Returns the SHA-2 family (SHA-224, SHA-256, SHA-384, or SHA-512) hashed value specified by _INT_ (which could be 224, 256, 384, or 512) for _STRING_. Returns NULL if _STRING_ or _INT_ is NULL. |

| Hash functions | Description |
| --- | --- |
| `STRING.md5()` | Returns the MD5 hash of _STRING_ as a string of 32 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha1()` | Returns the SHA-1 hash of _STRING_ as a string of 40 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha224()` | Returns the SHA-224 hash of _STRING_ as a string of 56 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha256()` | Returns the SHA-256 hash of _STRING_ as a string of 64 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha384()` | Returns the SHA-384 hash of _STRING_ as a string of 96 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha512()` | Returns the SHA-512 hash of _STRING_ as a string of 128 hexadecimal digits; returns NULL if _STRING_ is NULL. |
| `STRING.sha2(INT)` | Returns the SHA-2 family (SHA-224, SHA-256, SHA-384, or SHA-512) hashed value specified by _INT_ (which could be 224, 256, 384, or 512) for _STRING_. Returns NULL if _STRING_ or _INT_ is NULL. |

### 辅助函数

*   [**SQL**](#tab_SQL_12)
*   [**Java**](#tab_java_12)
*   [**Scala**](#tab_scala_12)

| 辅助函数 | 描述 |
| --- | --- |

| Auxiliary functions | Description |
| --- | --- |
| `ANY.as(NAME1, NAME2, ...)` | Specifies a name for _ANY_ (a field). Additional names can be specified if the expression expands to multiple fields. |

| Auxiliary functions | Description |
| --- | --- |
| `ANY.as(NAME1, NAME2, ...)` | Specifies a name for _ANY_ (a field). Additional names can be specified if the expression expands to multiple fields. |

## 聚合函数

聚合函数将所有行的表达式作为输入，并返回单个聚合值作为结果。

*   [**SQL**](#tab_SQL_13)
*   [**Java**](#tab_java_13)
*   [**Scala**](#tab_scala_13)

| 聚合函数 | 描述 |
| --- | --- |
| `COUNT([ ALL ] expression &#124; DISTINCT expression1 [, expression2]*)` | 默认情况下或使用ALL，返回_表达式_不为NULL 的输入行数。将DISTINCT用于每个值的一个唯一实例。 |
| `COUNT(*)` | 返回输入行数。 |
| `COUNT(1)` | |
| `AVG([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行的_表达式_的平均值（算术平均值）。将DISTINCT用于每个值的一个唯一实例。 |
| `SUM([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行的_表达式_总和。将DISTINCT用于每个值的一个唯一实例。 |
| `MAX([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行的_表达式_的最大值。将DISTINCT用于每个值的一个唯一实例。 |
| `MIN([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行中_表达式_的最小值。将DISTINCT用于每个值的一个唯一实例。 |
| `STDDEV_POP([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行中_表达式_的总体标准差。将DISTINCT用于每个值的一个唯一实例。 |
| `STDDEV_SAMP([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行中_表达式_的样本标准差。将DISTINCT用于每个值的一个唯一实例。 |
| `VAR_POP([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行中_表达式_的总体方差（总体标准差的平方）。将DISTINCT用于每个值的一个唯一实例。 |
| `VAR_SAMP([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，返回所有输入行中_表达式_的样本方差（样本标准差的平方）。将DISTINCT用于每个值的一个唯一实例。 |
| `COLLECT([ ALL &#124; DISTINCT ] expression)` | 默认情况下或使用关键字ALL，在所有输入行中返回多_表达式_。NULL值将被忽略。将DISTINCT用于每个值的一个唯一实例。 |

| Aggregate functions | Description |
| --- | --- |
| `FIELD.count` | Returns the number of input rows for which _FIELD_ is not NULL. |
| `FIELD.avg` | Returns the average (arithmetic mean) of _FIELD_ across all input rows. |
| `FIELD.sum` | Returns the sum of numeric field _FIELD_ across all input rows. If all values are NULL, returns NULL. |
| `FIELD.sum0` | Returns the sum of numeric field _FIELD_ across all input rows. If all values are NULL, returns 0. |
| `FIELD.max` | Returns the maximum value of numeric field _FIELD_ across all input rows. |
| `FIELD.min` | Returns the minimum value of numeric field _FIELD_ across all input rows. |
| `FIELD.stddevPop` | Returns the population standard deviation of numeric field _FIELD_ across all input rows. |
| `FIELD.stddevSamp` | Returns the sample standard deviation of numeric field _FIELD_ across all input rows. |
| `FIELD.varPop` | Returns the population variance (square of the population standard deviation) of numeric field _FIELD_ across all input rows. |
| `FIELD.varSamp` | Returns the sample variance (square of the sample standard deviation) of numeric field _FIELD_ across all input rows. |
| `FIELD.collect` | Returns a multiset of _FIELD_ across all input rows. |

| Aggregate functions | Description |
| --- | --- |
| `FIELD.count` | Returns the number of input rows for which _FIELD_ is not NULL. |
| `FIELD.avg` | Returns the average (arithmetic mean) of _FIELD_ across all input rows. |
| `FIELD.sum` | Returns the sum of numeric field _FIELD_ across all input rows. If all values are NULL, returns NULL. |
| `FIELD.sum0` | Returns the sum of numeric field _FIELD_ across all input rows. If all values are NULL, returns 0. |
| `FIELD.max` | Returns the maximum value of numeric field _FIELD_ across all input rows. |
| `FIELD.min` | Returns the minimum value of numeric field _FIELD_ across all input rows. |
| `FIELD.stddevPop` | Returns the population standard deviation of numeric field _FIELD_ across all input rows. |
| `FIELD.stddevSamp` | Returns the sample standard deviation of numeric field _FIELD_ across all input rows. |
| `FIELD.varPop` | Returns the population variance (square of the population standard deviation) of numeric field _FIELD_ across all input rows. |
| `FIELD.varSamp` | Returns the sample variance (square of the sample standard deviation) of numeric field _FIELD_ across all input rows. |
| `FIELD.collect` | Returns a multiset of _FIELD_ across all input rows. |

## 日期格式说明符

下表列出了日期格式函数的说明符。

| 符 | 描述 |
| --- | --- |
| `%a` | 缩写的工作日名称（`Sun`.. `Sat`） |
| `%b` | 缩写的月份名称（`Jan`.. `Dec`） |
| `%c` | 月，数字（`1`.. `12`） |
| `%D` | 这个月的一天，英语后缀（`0th`，`1st`，`2nd`，`3rd`，...） |
| `%d` | 每月的某天，数字（`01`.. `31`） |
| `%e` | 每月的某天，数字（`1`.. `31`） |
| `%f` | 第二个分数（打印6位数：`000000`... `999000`;解析时为1 - 9位数：`0`.. `999999999`）（时间戳被截断为毫秒。） |
| `%H` | 小时（`00`.. `23`） |
| `%h` | 小时（`01`.. `12`） |
| `%I` | 小时（`01`.. `12`） |
| `%i` | 分钟，数字（`00`.. `59`） |
| `%j` | 一年中的某一天（`001`.. `366`） |
| `%k` | 小时（`0`.. `23`） |
| `%l` | 小时（`1`.. `12`） |
| `%M` | 月份名称（`January`.. `December`） |
| `%m` | 月，数字（`01`.. `12`） |
| `%p` | `AM` 要么 `PM` |
| `%r` | 时间，12小时（`hh:mm:ss`其次是`AM`或`PM`） |
| `%S` | 秒（`00`... `59`） |
| `%s` | 秒（`00`... `59`） |
| `%T` | 时间，24小时（`hh:mm:ss`） |
| `%U` | 周（`00`.. `53`），周日是一周的第一天 |
| `%u` | 周（`00`.. `53`），周一是一周的第一天 |
| `%V` | 周（`01`.. `53`），周日是一周的第一天; 用于`%X` |
| `%v` | 周（`01`.. `53`），周一是一周的第一天; 用于`%x` |
| `%W` | 平日名称（`Sunday`.. `Saturday`） |
| `%w` | 星期几（`0`.. `6`），星期日是一周的第一天 |
| `%X` | 星期日是星期的第一天的星期，数字，四位数; 用于`%V` |
| `%x` | 一周的年份，星期一是一周的第一天，数字，四位数; 用于`%v` |
| `%Y` | 年份，数字，四位数 |
| `%y` | 年份，数字（两位数） |
| `%%` | 文字`%`字符 |
| `%x` | `x`，对于`x`上面未列出的任何内容 |

