• 类型转换函数
类型转换主要包括三种操作:转换、重新解释和提升。
转换(Conversion)。指将一个值的数据类型更改为另一种数据类型。这需要额外的计算,仅由
TO_STRING()
函数执行。重新解释(Reinterpretation)。指将表示一个值的二进制数据按不同的数据类型进行解释,而不实际更改底层数据。这由
SINT()
处理,不涉及额外计算;它只是重新解释现有数据。提升(Promotion)。指将一个值转换为“更大”或更精确的数据类型。它不需要额外计算,只是要求参数提供不同类型的值。仅 JSON 字段和一些其他函数可以将其值提升为整数。如果参数无法生成不同类型的值,则提升将失败。例如,
TIMEDIFF()
函数通常返回字符串,但也可以返回数字。因此,BIGINT(TIMEDIFF(1,2))
可以成功执行,强制TIMEDIFF()
提供一个整数值。相反,DATE_FORMAT()
仅返回字符串,无法生成数字,因此BIGINT(DATE_FORMAT(...))
将失败。
BIGINT()
此函数将整数参数提升为 64 位类型,而浮点参数保持不变。它的设计目的是确保在 64 位模式下评估某些表达式(如 a*b
),即使所有参数都是 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。
最后更新于