HetuEngine隐式转换对照表
在开启隐式转换功能后,当数据类型不匹配时会隐式转换,但并是不是所有的数据类型都支持隐式转换。以下为当前隐式转换功能支持的数据类型转换表:
| - | BOOLEAN | TINYINT | SMALLINT | INTEGER | BIGINT | REAL | DOUBLE | DECIMAL | VARCHAR |
|---|---|---|---|---|---|---|---|---|---|
| BOOLEAN | \ | Y(1) | Y | Y | Y | Y | Y | Y | Y(2) |
| TINYINT | Y(3) | \ | Y | Y | Y | Y | Y | Y | Y |
| SMALLINT | Y | Y(4) | \ | Y | Y | Y | Y | Y | Y |
| INTEGER | Y | Y | Y | \ | Y | Y | Y | Y | Y |
| BIGINT | Y | Y | Y | Y | \ | Y | Y | Y | Y |
| REAL | Y | Y | Y | Y | Y | \ | Y | Y(5) | Y |
| DOUBLE | Y | Y | Y | Y | Y | Y | \ | Y | Y |
| DECIMAL | Y | Y | Y | Y | Y | Y | Y | \(6) | Y |
| VARCHAR | Y(7) | Y | Y | Y | Y | Y | Y | Y(8) | \ |
| CHAR | N | N | N | N | N | N | N | N | Y |
| VARBINARY | N | N | N | N | N | N | N | N | N |
| JSON | N | N | N | N | N | N | N | N | Y |
| DATE | N | N | N | N | N | N | N | N | Y |
| TIME | N | N | N | N | N | N | N | N | Y |
| TIME WITH TIME ZONE | N | N | N | N | N | N | N | N | Y |
| TIMESTAMP | N | N | N | N | N | N | N | N | Y |
| TIMESTAMP WITH TIME ZONE | N | N | N | N | N | N | N | N | Y |
| - | CHAR | VARBINARY | JSON | DATE | TIME | TIME WITH TIME ZONE | TIMESTAMP | TIMESTAMP WITH TIME ZONE |
|---|---|---|---|---|---|---|---|---|
| BOOLEAN | N | N | Y | N | N | N | N | N |
| TINYINT | N | N | Y | N | N | N | N | N |
| SMALLINT | N | N | Y | N | N | N | N | N |
| INTEGER | N | N | Y | N | N | N | N | N |
| BIGINT | N | N | Y | N | N | N | N | N |
| REAL | N | N | Y | N | N | N | N | N |
| DOUBLE | N | N | Y | N | N | N | N | N |
| DECIMAL | N | N | Y | N | N | N | N | N |
| VARCHAR | Y(9) | Y | Y | Y(10) | Y(11) | Y(12) | Y(13) | Y |
| CHAR | \ | N | N | N | N | N | N | N |
| VARBINARY | N | \ | N | N | N | N | N | N |
| JSON | N | N | \ | N | N | N | N | N |
| DATE | N | N | Y | \ | N | N | Y(14) | Y |
| TIME | N | N | N | N | \ | Y(15) | Y(16) | Y |
| TIME WITH TIME ZONE | N | N | N | N | Y | \ | Y | Y |
| TIMESTAMP | N | N | N | Y | Y | Y | \ | Y |
| TIMESTAMP WITH TIME ZONE | N | N | N | Y | Y | Y | Y | \ |
- BOOLEAN->NUMBER:结果只会是0/1。
- BOOLEAN->VARCHAR:字符结果只会是“TRUE”或“FALSE”。
- NUMBER -> BOOLEAN:0就是false,非0就是true。
- BIG PRECISION -> SMALL:不能大于目标类型的取值范围,否则会报错。
- REAL/FLOAT ->DECIMAL:目标类型的整数位必须大于或等于REAL/FLOAT整数位,否则转换报错,小数位不足会截断。
- DECIMAL->DECIMAL:目标类型整数位的范围必须大于等于源类型,否则转换失败,小数位不足会截断。
- VARCHAR->BOOLEAN:字符只有 '0','1','TRUE','FALSE' 可转换。
- VARCHAR->DECIMAL:如果小数位大于目标decimal的小数位,则会发生截断,如果整数位超过目标decimal的范围则报错。
- VARCHAR->CHAR:如果VARCHAR长度超过目标长度,则会截断。
- VARCHAR->DATE:仅支持按照“-”分隔的日期,例如2000-01-01。
- VARCHAR->TIME:仅支持严格的日期格式:HH:MM:SS.XXX。
- VARCHAR->TIME ZONE:仅支持严格的格式,例如01:02:03.456 America/Los_Angeles。
- VARCHAR->TIMESTAMP:仅支持严格的格式:YYYY-MM-DD HH:MM:SS.XXX。
- DATE->TIMESTAMP:自动补齐时间,补零 '2010-01-01' -> 2010-01-01 00:00:00.000。
- TIME->TIME WITH TIME ZONE:自动补齐时区。
- TIME->TIMESTAMP:自动补齐日期,取默认值1970-01-01。