You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by GitBox <gi...@apache.org> on 2022/05/06 07:55:29 UTC

[GitHub] [flink] fsk119 commented on a diff in pull request #19498: [FLINK-26588][docs]Translate the new CAST documentation to Chinese

fsk119 commented on code in PR #19498:
URL: https://github.com/apache/flink/pull/19498#discussion_r866547558


##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换

Review Comment:
   Remove '从' ?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |

Review Comment:
   输出类型 -> 目标类型?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。

Review Comment:
   请注意:无论是 `CAST` 还是 `TRY_CAST`,当输入为 `NULL` ,输出也为 `NULL`。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,
+在 Flink 1.15 版本此参数默认为 disabled。
+
+如果设置为 enabled,请注意以下问题:
+
+* 转换为 `CHAR`/`VARCHAR`/`BINARY`/`VARBINARY` 数据类型时,不再自动修剪(trim)或填充(pad)。
+* 使用 `CAST` 时不再会因为转化失败而停止作业,只会返回 `NULL`,但不会像 `TRY_CAST` 那样推断正确的类型。
+* `CHAR`/`VARCHAR`/`STRING` 的转换结果会有一些细微的差别。
+
+{{< hint warning >}}
+我们 **不建议** 配置此参数,而是 **强烈建议** 在新项目中保持这个参数为默认禁用,以使用最新版本的 cast 方法。

Review Comment:
   以使用最新版本的 cast 方法 -> 以使用最新版本的 cast 行为



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。

Review Comment:
   > 而有些转换则会发生错误,在运行时失败
   而有些转换则会在运行时失败(例如,当无法为目标类型创建相应的值时)



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。

Review Comment:
   > 而有些转换则会发生错误,在运行时失败
   
   而有些转换则会在运行时失败



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。

Review Comment:
   ??



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。

Review Comment:
   > 但反过来从 `STRING` 数据类型转换为 `INT` 数据类型就不一定了。
   
   但无法保证将`STRING` 数据类型转换为 `INT` 数据类型。
   



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。

Review Comment:
   需要用户手动处理 -> 需要用户正确处理



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法

Review Comment:
   Upper case?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |

Review Comment:
   输出类型 -> 目标类型?



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。

Review Comment:
   所有转化到具有固长或变长的类型时会根据类型的定义来裁剪或填充数据。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。

Review Comment:
   例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型 -> 例如从 `TIMESTAMP` 类型转化到 `INTERVAL` 类型。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。

Review Comment:
   需要用户手动处理 -> 需要用户正确处理



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。

Review Comment:
   > 但反过来从 `STRING` 数据类型转换为 `INT` 数据类型就不一定了。
   
   但无法保证将`STRING` 数据类型转换为 `INT` 数据类型。
   



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。

Review Comment:
   所有转化到具有固长或变长的类型时会根据类型的定义来裁剪或填充数据。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法

Review Comment:
   Upper case?
   
   或者 翻译称为 类型转换? 
   
   In the PG community, they use the `类型转换`[1].
   
   [1] http://www.postgres.cn/docs/12/typeconv.html
   



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,
+在 Flink 1.15 版本此参数默认为 disabled。
+
+如果设置为 enabled,请注意以下问题:
+
+* 转换为 `CHAR`/`VARCHAR`/`BINARY`/`VARBINARY` 数据类型时,不再自动修剪(trim)或填充(pad)。
+* 使用 `CAST` 时不再会因为转化失败而停止作业,只会返回 `NULL`,但不会像 `TRY_CAST` 那样推断正确的类型。
+* `CHAR`/`VARCHAR`/`STRING` 的转换结果会有一些细微的差别。
+
+{{< hint warning >}}
+我们 **不建议** 配置此参数,而是 **强烈建议** 在新项目中保持这个参数为默认禁用,以使用最新版本的 cast 方法。

Review Comment:
   以使用最新版本的 cast 方法 -> 以使用最新版本的 cast 行为



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,

Review Comment:
   用户可以通过将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled` 来启用 1.15 版本之前的 CAST 行为。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容

Review Comment:
   去掉 的兼容 吧



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容
+
+想使用 Flink 1.15 之前版本的 cast 方法,可以将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled`,

Review Comment:
   用户可以通过将参数 `table.exec.legacy-cast-behaviour` 设置为 `enabled` 来启用 1.15 版本之前的 CAST 行为。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。

Review Comment:
   符合标准 SQL 的常规 cast 方法 -> 定义在 SQL 标准的 CAST 方法。
   
   当实际输入数据不是其 `输入` 数据类型时 -> 当实际输入数据不合法时。
   
   > The type inference will preserve the nullability of the input type. 
   
   类型推导会保留输入类型的可空性。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。

Review Comment:
   请注意:无论是 `CAST` 还是 `TRY_CAST`,当输入为 `NULL` ,输出也为 `NULL`。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。

Review Comment:
   符合标准 SQL 的常规 cast 方法 -> 定义在 SQL 标准的 CAST 方法。
   
   当实际输入数据不是其 `输入` 数据类型时 -> 当实际输入数据不合法时。
   
   > The type inference will preserve the nullability of the input type. 
   
   类型推导会保留输入类型的可空性。也就是说,该方法的返回类型和输入类型有相同的可空性。



##########
docs/content.zh/docs/dev/table/types.md:
##########
@@ -1487,6 +1481,93 @@ Not supported.
 {{< /tab >}}
 {{< /tabs >}}
 
+<a name="casting"></a>
+
+cast 方法
+-------
+
+Flink Table API 和 Flink SQL 支持从 `输入` 数据类型 到 `目标` 数据类型的转换。有的转换
+无论输入值是什么都能保证转换成功,而有些转换则会发生错误,在运行时失败(即不可能转换为 `目标` 数据类型对应的值)。
+例如,将 `INT` 数据类型的值转换为 `STRING` 数据类型一定能转换成功,但反过来从 `STRING` 数据类型
+转换为 `INT` 数据类型就不一定了。
+
+在生成执行计划时,Flink 的 SQL 检查器会拒绝提交那些不可能直接转换为 `目标` 数据类型的SQL,并抛出 `ValidationException` 异常,
+例如想要从 `TIMESTAMP` 数据类型转化到 `INTERVAL` 数据类型。
+然而有些查询即使通过了 SQL 检查器的验证,依旧可能会在运行期间转换失败,这就需要用户手动处理这些失败了。
+
+在 Flink Table API 和 Flink SQL 中,可以用下面两个内置方法来进行转换操作:
+
+* `CAST`:符合标准 SQL 的常规 cast 方法。在某些容易发生转换失败的查询场景中,当实际输入数据不是其 `输入` 数据类型时,作业便会运行失败。另外,类型校验机制支持输入的数据中有空值。
+* `TRY_CAST`:常规 cast 方法的扩展,当转换失败时返回 `NULL`。该方法的返回值允许为空。
+
+例如:
+
+```sql
+CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式(非空)
+CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+CAST('non-number' AS INT) --- 抛出异常,并停止作业
+
+TRY_CAST('42' AS INT) --- 结果返回数字 42 的 INT 格式
+TRY_CAST(NULL AS VARCHAR) --- 结果返回 VARCHAR 类型的空值
+TRY_CAST('non-number' AS INT) --- 结果返回 INT 类型的空值
+COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的 INT 格式(非空)
+```
+
+下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
+
+| 输入类型\输出类型                              | `CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` | `BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` | `SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` | `TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` | `ROW` | `STRUCTURED` | `RAW` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING`    |                   Y                   |                    !                     |     !     |     !     |     !     |     !      |     !     |    !     |    !    |    !     |   !    |   !    |      !      |        !        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` |                   Y                   |                    Y                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BOOLEAN`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DECIMAL`                              |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TINYINT`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `SMALLINT`                             |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTEGER`                              |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁵     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `BIGINT`                               |                   Y                   |                    N                     |     Y     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |     N²      |       N²        |     Y⁶     |    N    |     N      |   N   |   N   |      N       |   N   |
+| `FLOAT`                                |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DOUBLE`                               |                   Y                   |                    N                     |     N     |     Y     |     Y     |     Y      |     Y     |    Y     |    Y    |    Y     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `DATE`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   N    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIME`                                 |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP`                            |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `TIMESTAMP_LTZ`                        |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   Y    |   Y    |      Y      |        Y        |     N      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `INTERVAL`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |    Y⁵     |    Y⁶    |    N    |    N     |   N    |   N    |      N      |        N        |     Y      |    N    |     N      |   N   |   N   |      N       |   N   |
+| `ARRAY`                                |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |   !³    |     N      |   N   |   N   |      N       |   N   |
+| `MULTISET`                             |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     !³     |   N   |   N   |      N       |   N   |
+| `MAP`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |  !³   |   N   |      N       |   N   |
+| `ROW`                                  |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |  !³   |      N       |   N   |
+| `STRUCTURED`                           |                   Y                   |                    N                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      !³      |   N   |
+| `RAW`                                  |                   Y                   |                    !                     |     N     |     N     |     N     |     N      |     N     |    N     |    N    |    N     |   N    |   N    |      N      |        N        |     N      |    N    |     N      |   N   |   N   |      N       |  Y⁴   |
+
+备注:
+
+1. 在转换时,输入数据中的常量、变量会根据目标数据类型的格式进行修剪(trim)或填充(pad)。
+2. 使用 `TO_TIMESTAMP` 方法和 `TO_TIMESTAMP_LTZ` 方法的场景,不要使用 `CAST` 或 `TRY_CAST`。
+3. 支持转换,当且仅当用其内部数据结构也支持转化时。转换可能会失败,当且仅当用其内部数据结构也可能会转换失败。
+4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
+5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
+6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+
+无论是 `CAST` 还是 `TRY_CAST`,输入为 `NULL` ,则输出也为 `NULL`。
+
+<a name="legacy-casting"></a>
+
+### 旧版本 cast 方法的兼容

Review Comment:
   去掉 的兼容 吧



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscribe@flink.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org