更新时间:2025-10-23 GMT+08:00

类型转换

背景信息

在SQL中,每个数据都与一个决定其行为和用法的数据类型相关。在M-Compatibility里,有四种基本的SQL结构需要独立的类型转换规则。

  • 函数调用

    多数SQL类型系统是构筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。

  • 操作符

    SQL允许在表达式上使用前缀或后缀(一元)操作符,也允许表达式内部使用二元操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。

  • 值存储

    INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。

  • UNION,CASE和相关构造

    因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个CASE表达式会有一个统一的输出类型。

四种SQL结构在M-Compatibility类型转换规则下分为三种场景:隐式类型转换、显式类型转换以及UNION、CASE和相关构造。M-Compatibility中针对三种场景有不同的转换行为与转换关系。

语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。M-Compatibility数据类型的基本类型分类包括:INTEGER、DECIMAL、STRING、BITSTRING、FLOAT和TEMPORAL。为了解决表达式的类型选择问题,M-Compatibility中每种基本类型之间都存在隐式转换。根据类型与可用的隐式转换,可以保证有歧义的表达式得到有效的解决方式。