当转换有意义时,OceanBase 数据库会自动将一个值从一种数据类型转换为另一种数据类型。隐式数据类型的转换规则:

    • UPDATE 操作时,OceanBase 把变量值转换成列类型。
    • SELECT FROM 操作时,OceanBase 把列数据类型转换成目标变量类型。
    • 字符值和数字值比较时,OceanBase 把字符值转换成数字值。

    • 在处理数值时,OceanBase 会调整精度和小数位数。由此产生的数字数据类型与基础表中找到的数字数据类型不同。

    • 字符值或数值和浮点数值之间的转换可以是不精确的,因为字符类型和数量使用十进制精度来表示数值,浮点数使用二进制精度。

    • 当一个 CLOB 值转换为一个字符类型如 VARCHAR2,或 BLOB 转换为 RAW 时。如果要转换的数据大于目标数据类型,那么数据库会返回一个错误。

    • BINARY_FLOAT 转换为 BINARY_DOUBLE 是准确的。

    • 如果 BINARY_DOUBLE 的精度位数超出了 BINARY_FLOAT 支持的位数, 转换为 BINARY_FLOAT 是不精确的。

    • 当将字符值与 DATE 值进行比较时,OceanBase 将字符数据转换为 DATE

    • 赋值操作时,OceanBase 把等号右边的值转换成左边赋值目标数据类型。

    • 连接操作时,OceanBase 把非字符类型转换成字符类型或国家字符类型。

    隐式数据类型转换矩阵

    下表显示了所有的隐式数据类型转换,您不需要考虑转换的方向或转换的上下文。“-”表示不支持转换。

    1 您不能直接将 RAW 转换为 INTERVAL,但是可以使用 UTL_RAW.CAST_TO_VARCHAR2([RAW])RAW 转换为 VARCHAR2,然后将所得的 VARCHAR2 值转换为 INTERVAL

    不同字符类型之间隐式转换的方向

    隐式数据类型转换示例

    执行以下语句:

    语句执行失败,且您收到以下报错:

    1. invalid number

    这是由于 OceanBase 使用了隐式数据类型转换,将 转换为数字类型,但是转换失败。

    本示例将字符串 ‘2’CHAR 数据类型隐式转换为了数字数据类型 2,计算结果为 52

    执行以下语句:

    查询结果如下:

    1. +---------------------+
    2. +---------------------+
    3. | 52 |
    4. +---------------------+

    显式数据类型转换

    您可以使用 SQL 转换函数转换数据类型,SQL 函数显式转换一个数据类型为另一个数据类型。

    显示类型转换矩阵

    显式数据类型转换示例

    当前的时间通过 TO_CHAR 函数显式转换为想要的格式输出。

    执行以下语句:

    查询结果如下:

    1. +-------------------------------+
    2. | TO_CHAR(SYSDATE,'YYYY_MM_DD') |
    3. +-------------------------------+
    4. | 2020_02_27 |