数据类型的强制转化规则¶
神通数据库系统支持在一个SQL 查询的同一表达式里混合不同的数据类型。为此,神通数据库提供了一个数据转换的功能来实现混合计算。在这篇文档中给出了所有神通数据库系统支持的可进行转换的所有数据类型对以及转换的类别。不同的转换类别会对查询的结果产生明显的影响,这些影响又可以由用户或程序员通过显示的类型转换进行剪裁利用.
下表中列出了神通数据库系统提供的数据类型之间转换关系。其中,上下文的含义说明如下:
e类型转换
需要用户明确指定进行类型转换并且忽略可能的精度丢失。这种类型转换一般用于不同类别的数据类型之间进行转换,比如binary到int1。
i类型转换
无须用户明确指定进行类型转换,系统会自动尝试这样的转换并且保证不会发生精度丢失
a类型转换
无须用户明确指定进行类型转换,系统会自动尝试这样的转换,转换一般发生在赋值操作并且忽略可能的精度丢失。这种转换类型一般针对相同类别的数据类型之间的转换,在一个赋值操作、一个函数和过程调用、一个insert操作时,系统会选择这种类型的转化。
其它
用户通过cast明确要求的转换,但这些转换不一定符合神通数据库内建的转换。神通数据库会尝试进行转换,但并不保证转换的结果一定有意义。
神通数据库系统提供的数据类型之间转换关系如下表所示:
| FROM ====> TO | INT1 | INT2 | INT4 | INT8 | BOOL | CHAR | VARCHAR | TEXT | BINARY | VARBINARY | BIT | NUMERIC | DECIMAL | REAL | DOUBLE | FLOAT | FLOAT | DATE | INTERVAL YEAR TO MONTH | INTERVAL DAY TO SECOND | TIME | TIME WITH TIME ZONE | TIMESTAMP | TIMESTAMP WITH TIME ZONE |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| INT1 | i | i | i | e | i | i | i | i | i | i | i | i | i | |||||||||||
| INT2 | a | i | i | e | i | i | i | i | i | i | i | i | i | |||||||||||
| INT4 | a | a | i | e | i | i | i | i | i | e | i | i | i | i | i | i | a | |||||||
| INT8 | a | a | a | e | i | i | i | i | i | i | i | i | i | i | ||||||||||
| BOOL | e | e | e | e | i | i | i | |||||||||||||||||
| CHAR | e | a | i | i | e | e | e | e | e | e | e | i | ||||||||||||
| VARCHAR | e | a | i | i | i | e | e | e | e | e | e | e | i | i | i | |||||||||
| TEXT | e | e | e | e | i | i | i | i | e | e | e | e | e | e | e | e | e | e | e | e | e | |||
| BINARY | e | e | e | e | i | |||||||||||||||||||
| VARBINARY | e | e | e | e | e | i | i | i | a | i | e | e | e | e | e | e | e | e | e | e | e | e | e | |
| BIT | e | e | i | i | i | i | ||||||||||||||||||
| NUMERIC | a | a | a | a | i | i | i | i | i | a | i | a | ||||||||||||
| DECIMAL | a | a | a | a | i | i | i | i | i | a | i | a | ||||||||||||
| REAL | a | a | a | a | i | i | i | i | i | i | i | |||||||||||||
| DOUBLE | a | a | a | a | i | i | i | i | a | a | i | a | ||||||||||||
| FLOAT(n), 1 <= n <= 24 | a | a | a | a | i | i | i | i | i | i | i | |||||||||||||
| FLOAT(n), 24 < n <= 53 | a | a | a | a | i | i | i | i | a | i | a | |||||||||||||
| DATE | i | i | i | i | ||||||||||||||||||||
| INTERVAL YEAR TO MONTH | i | i | ||||||||||||||||||||||
| INTERVAL DAY TO SECOND | i | i | i | i | ||||||||||||||||||||
| TIME | i | i | i | |||||||||||||||||||||
| TIME WITH TIME ZONE | i | i | a | |||||||||||||||||||||
| TIMESTAMP | i | i | a | a | i | |||||||||||||||||||
| TIMESTAMP WITH TIME ZONE | i | i | a | a | a | a |