# 类型转换函数

类型转换包括三种主要操作：转换、重新解释和提升。
* **转换**。指将一个值的数据类型更改为另一种数据类型的过程。这涉及额外的计算，仅由 `TO_STRING()` 函数执行。
* **重新解释**。指将表示一个值的二进制数据视为另一种数据类型，而不实际改变底层数据。此操作由 `SINT()` 处理，不涉及额外计算；它仅仅是重新解释现有数据。
* **提升**。指将一个值转换为“更大”或更精确的数据类型的过程。它也不需要额外计算；它仅仅是请求参数提供不同类型的值。仅 JSON 字段和少数其他函数可以将它们的值提升为整数。如果一个参数不能产生不同类型的值，则提升失败。例如，`TIMEDIFF()` 函数通常返回字符串，但也可以返回数字。因此，`BIGINT(TIMEDIFF(1,2))` 会成功执行，强制 `TIMEDIFF()` 提供一个整数值。相反，`DATE_FORMAT()` 仅返回字符串，不能产生数字，这意味着 `BIGINT(DATE_FORMAT(...))` 会失败。

### BIGINT()

此函数将整数参数提升为64位类型，而浮点参数保持不变。它旨在确保特定表达式（如 `a*b`）以64位模式进行评估，即使所有参数都是32位。

### DOUBLE()

`DOUBLE()` 函数将其参数提升为浮点类型。此设计用来帮助强制评估数值型 JSON 字段。

### INTEGER()

`INTEGER()` 函数将其参数提升为64位有符号类型。此设计用来强制评估数值型 JSON 字段。

### TO_STRING()

此函数强制将其参数转换为字符串类型。

### UINT()

`UINT()` 函数将其参数提升为32位无符号整数类型。

### UINT64()

`UINT64()` 函数将其参数提升为64位无符号整数类型。

### SINT()

`SINT()` 函数强制重新解释其32位无符号整数参数为有符号，并将其扩展为64位类型（因为32位类型是无符号的）。例如，1-2 通常计算结果为 4294967295，但 `SINT(1-2)` 的计算结果为 -1。
<!-- proofread -->

