在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