You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CASE表达式匹配regexp_extract_all结果时类型不匹配问题求助

解决CASE表达式类型不匹配错误

问题原因

你使用regexp_extract_all提取国家代码时,该函数返回的是数组类型(array(varchar)),但CASE表达式的WHEN子句中使用的是普通字符串(varchar),两者类型不匹配,因此触发报错。

解决方案

有两种可行的修改方式:

方法1:改用单值提取函数regexp_extract

由于你的原字段值是{"code":"IE"}这种单结构JSON,只会匹配到一个国家代码,直接用返回单个字符串的regexp_extract替代regexp_extract_all即可:

regexp_extract(country_code,'"code":"(.*?)"',1) as "CountryCode",

修改后原CASE表达式可正常使用,无需额外调整。

方法2:从数组中提取单个元素

若因特殊需求必须保留regexp_extract_all,可在CASE中直接取数组的第一个元素(不同SQL引擎的数组访问语法略有差异):

  • Spark SQL、Trino等引擎可使用element_at函数:
CASE element_at("CountryCode", 1) 
  When 'AF' THEN 'Afghanistan'
  When 'AL' THEN 'Albania'
  -- 其余国家映射逻辑省略
END as CountryName
  • Hive等引擎可直接通过下标访问(注意Hive数组下标从0开始):
CASE "CountryCode"[0] 
  When 'AF' THEN 'Afghanistan'
  When 'AL' THEN 'Albania'
  -- 其余国家映射逻辑省略
END as CountryName

内容的提问来源于stack exchange,提问作者icenature

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 06:10:53