【问题标题】:In clickhouse, how to return null instead of throw exception when casting failed?在clickhouse中,投射失败时如何返回null而不是抛出异常?
【发布时间】:2021-09-09 03:17:20
【问题描述】:

如果将字符串值转换为int失败,clickhouse会抛出异常,如何在转换失败时返回null而不是抛出异常?谢谢。

SELECT CAST('a' AS Int32)

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    ClickHouse 提供了一套函数来解决它:

    SELECT
        toInt32OrNull('a'),
        accurateCastOrNull('b', 'Int32')
    
    /*
    ┌─toInt32OrNull('a')─┬─accurateCastOrNull('b', 'Int32')─┐
    │               ᴺᵁᴸᴸ │                             ᴺᵁᴸᴸ │
    └────────────────────┴──────────────────────────────────┘
    */
    

    查看可用功能的完整列表:

    SELECT name
    FROM system.functions
    WHERE name ILIKE '%ornull%'
    ORDER BY name ASC
    
    /*
    ┌─name────────────────────────────┐
    │ accurateCastOrNull              │
    ..
    │ toUInt8OrNull                   │
    │ toUUIDOrNull                    │
    └─────────────────────────────────┘
    */
    

    【讨论】:

    • 嗨,@vladimir,当我使用准确的CastOrNull(22.32 AS Int16)时,它返回NULL而不是22,似乎这个函数太严格了,无法将浮点数转换为整数,我该如何解决这个问题?
    • @Henrik 它需要使用 toInt16(22.32)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 2018-07-27
    • 1970-01-01
    • 2012-12-22
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多