隐式转换对照表
当数据类型不匹配时会隐式转换,但并是不是所有的数据类型都支持隐式转换。以下为当前隐式转换功能支持的数据类型转换表:
- |
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。