在clickhouse中,投射失败时如何返回null而不是抛出异常?

Posted

技术标签:

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

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

SELECT CAST('a' AS Int32)

【问题讨论】:

【参考方案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)

以上是关于在clickhouse中,投射失败时如何返回null而不是抛出异常?的主要内容,如果未能解决你的问题,请参考以下文章

在 ClickHouse 中使用 JOINS 和检查 NULL 的 Tableau 查询失败

从 ClickHouse 访问 HDFS HA 集群失败,出现错误 HdfsConfigNotFound

为啥 environment.getProperty("spring.profiles.active") 在使用 @ActiveProfiles 激活测试中的配置文件时返回 nul

在 C++ 中投射时的对象切片

Chromecast - 完成投射后返回主页

将 URL 投射到 Chromecast 时,如何向它播放音频?