如何从表的JSON字段中解析出目标电话号码值?
提取JSON数组中的电话号码并匹配目标值
问题分析
你之前的查询未成功有两个核心原因:
- 仅筛选了数组的第一个元素(
f.index = 0),但目标号码15558675309对应的是数组第二个元素的data字段值+15558675309; - 直接将
f.value转为字符串会得到整个JSON对象的字符串,而非单独提取data字段的电话号码值。
正确查询语句
如果你需要提取并清洗所有号码,筛选出匹配目标值的记录,可使用以下SQL:
SELECT party_id, f.value:data::STRING AS original_phone, -- 移除所有非数字字符,统一号码格式 REGEXP_REPLACE(f.value:data::STRING, '[^0-9]', '') AS cleaned_phone FROM main__parties, LATERAL FLATTEN(input => party_phones) f WHERE REGEXP_REPLACE(f.value:data::STRING, '[^0-9]', '') = '15558675309'
说明
f.value:data::STRING用于精准提取每个数组元素中的data字段(即原始电话号码);REGEXP_REPLACE函数移除号码中的所有非数字字符,确保不同格式的同一号码(如555-867-5309和+15558675309)都能匹配到目标值15558675309;- 若只需提取特定位置的号码,可调整
WHERE条件(比如f.index = 1),但清洗格式后匹配的方式更灵活,能覆盖所有等价号码。
内容的提问来源于stack exchange,提问作者DodgerFH
相关产品推荐
相关产品推荐

