转换函数

    必要时,可以显式地将值转换为特定的类型。

    或者,您可以启用 功能,然后 openLooKeng 将尝试自动应用源类型和目标类型之间的转换。

    cast(value AS type) -> type

    将值显式转换为某个类型。可以使用该函数将 varchar 转换为数值类型,反之亦然。

    try_cast(value AS type) -> type

    cast 类似,如果转换失败,则返回 NULL。

    format(format, args…) -> varchar

    使用指定的格式字符串和参数返回一个格式化字符串:

    parse_presto_data_size 函数支持以下单位:

    parse_presto_data_size(string) -> decimal(38)

    将格式为 的 string 解析为一个数字,其中 valueunit 值的小数表示形式:

    默认情况下,属性值为 false,此时隐式转换关闭。

    如果属性值设置为 true,每当 openLooKeng 发现类型不匹配,但可能彼此兼容时,openLooKeng 就会通过应用 CAST 函数来自动重写语句。

    这样,用户就无需显式地添加 CAST 函数来对类型进行转换。

    例如,期望返回 varchar 值的查询会自动将 bigint 值转换为等效的 varchar 值。

    很显然,并非所有的数据类型都是相互兼容的,下表列出了所有基本数据类型的所有可行转换。

    BOOLEANTINYINTSMALLINTINTEGERBIGINTREALDOUBLEDECIMALVARCHARCHARVARBINARYJSONDATETIMETIME WITH TIME ZONETIMESTAMPTIMESTAMP WITH TIME ZONE
    BOOLEANY(1)YYYYYYY(2)NNYNNNNN
    TINYINTY(3)YYYYYYYNNYNNNNN
    SMALLINTYY(4)YYYYYYNNYNNNNN
    INTEGERYYYYYYYYNNYNNNNN
    BIGINTYYYYYYYYNNYNNNNN
    REALYYYYYYY(5)YNNYNNNNN
    DOUBLEYYYYYYYYNNYNNNNN
    DECIMALYYYYYYY(6)YNNYNNNNN
    VARCHARY(7)YYYYYYY(8)Y(9)YYY(10)Y(11)Y(12)Y(13)Y
    CHARNNNNNNNNYNNNNNNN
    VARBINARYNNNNNNNNNNNNNNNN
    JSONNNNNNNNNYNNNNNNN
    DATENNNNNNNNYNNYNNY(14)Y
    TIMENNNNNNNNYNNNNY(15)Y(16)Y
    TIME WITHNNNNNNNNYNNNNYYY
    TIME ZONE
    TIMESTAMPNNNNNNNNYNNNYYYY
    TIMESTAMPNNNNNNNNYNNNYYYY
    WITH TIME
    ZONE

    说明:

    • N:表示不支持隐式转换

    (1)BOOLEAN -> NUMBER:转换结果只能为 0 或 1。

    (2)BOOLEAN -> VARCHAR:转换结果只能为 TRUE 或 FALSE。

    (3)NUMBER -> BOOLEAN:0 将转换为 false,其他值将转换为 true。

    (4)BIG PRECISION -> SAMLL:当数据超出 SMALL 范围时,转换将失败。

    (5)REAL/FLOAT -> DECIMAL:当数据超出 DECIMAL 范围时,转换将失败。当超出范围时,范围将被截断。

    (7)VARCHAR -> BOOLEAN:只能转换“0”、“1”、“TRUE”和“FALSE”。其他值的转换会失败。

    (8)VARCHAR -> DECIMAL:当数据不是数值或转换后的值超出 DECIMAL 范围时,转换将失败。当超出范围时,范围将被截断。

    (9)VARCHAR -> CHAR:如果 VARCHAR 的长度大于 CHAR,它将被截断。

    (10)VARCHAR -> DATE:只能将 VARCHAR 格式化为“YYYY-MM-DD”的形式,例如 2000-01-01。

    (11)VARCHAR -> TIME:只能将 VARCHAR 格式化为“HH:MM:SS.XXX”的形式。

    (12)VARCHAR -> TIME ZONE:只能将 VARCHAR 格式化为“HH:MM:SS.XXX XXX”的形式,例如 01:02:03.456 America/Los_Angeles

    (13)VARCHAR -> TIMESTAMP:只能将 VARCHAR 格式化为“YYYY-MM-DD HH:MM:SS.XXX”的形式。

    (14)DATE -> TIMESTAMP:会自动使用 0 填充时间,例如将 2010-01-01 转换为 2010-01-01 00:00:00.000。

    (15)TIME -> TIME WITH TIME ZONE:会自动填充默认时区。

    (16)TIME -> TIMESTAMP:会自动添加默认日期 1970-01-01。

    typeof(expr) -> varchar