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

如何在ClickHouse中从Nullable(String)提取指定邮箱值

提取JSON数组中的邮箱值并关联ID的解决方法

假设你用的是ClickHouse(从Nullable(String)字段类型判断),可以通过以下SQL实现需求:

SELECT
    ID,
    JSONExtractString(array_element, 'value') AS email
FROM
    your_table
-- 先过滤掉空的my_array记录,避免解析报错
WHERE
    my_array IS NOT NULL
-- 把JSON数组字符串解析成数组,并展开每个元素为单独行
ARRAY JOIN
    JSONExtractArray(my_array) AS array_element
-- 可选:过滤出符合邮箱格式的记录,避免无效值
WHERE
    JSONExtractString(array_element, 'value') LIKE '%@%.%'

关键步骤说明:

  • JSONExtractArray(my_array):将字符串类型的JSON数组解析为ClickHouse原生数组类型,方便后续展开。
  • ARRAY JOIN:把数组中的每个JSON对象元素拆分成单独的行,这样每个ID就能对应其数组里的每一个邮箱。
  • JSONExtractString(array_element, 'value'):从每个JSON对象中提取value字段,也就是你需要的邮箱地址。
  • 最后的WHERE子句是可选校验,通过LIKE '%@%.%'过滤出符合基本邮箱格式的记录,避免提取无效内容。

如果你的my_array存在格式不规范的情况(比如不是合法JSON数组),可以用try()函数包裹解析逻辑,防止查询中断:

SELECT
    ID,
    JSONExtractString(array_element, 'value') AS email
FROM
    your_table
WHERE
    my_array IS NOT NULL
ARRAY JOIN
    try(JSONExtractArray(my_array)) AS array_element
WHERE
    JSONExtractString(array_element, 'value') LIKE '%@%.%'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 06:23:16