如何在Redshift中解析含键值对的字符串并提取指定字段
Redshift文本列提取指定键值对字段方案
假设你的表名为your_table,存储键值对的文本列名为attr_str,可以使用Redshift的REGEXP_SUBSTR函数结合正则表达式提取目标字段:
提取各字段的SQL示例
1. 提取Manager字段
SELECT REGEXP_SUBSTR(attr_str, '"Manager"=>"([^"]+)"', 1, 1, 'e') AS manager FROM your_table;
2. 提取Manager employee ID字段
SELECT REGEXP_SUBSTR(attr_str, '"Manager employee ID"=>"([^"]+)"', 1, 1, 'e') AS manager_employee_id FROM your_table;
3. 提取Manager First Name字段
SELECT REGEXP_SUBSTR(attr_str, '"Manager First Name"=>"([^"]+)"', 1, 1, 'e') AS manager_first_name FROM your_table;
正则逻辑说明
'"KeyName"=>"([^"]+)"':精准匹配目标键的格式,捕获双引号包裹的字段值([^"]+表示匹配除双引号外的任意字符,直到遇到下一个双引号终止)REGEXP_SUBSTR参数'e':指定返回正则表达式中第一个捕获组的内容,而非整个匹配的完整片段
如果需要一次性提取所有字段,可合并为单条SQL:
SELECT REGEXP_SUBSTR(attr_str, '"Manager"=>"([^"]+)"', 1, 1, 'e') AS manager, REGEXP_SUBSTR(attr_str, '"Manager employee ID"=>"([^"]+)"', 1, 1, 'e') AS manager_employee_id, REGEXP_SUBSTR(attr_str, '"Manager First Name"=>"([^"]+)"', 1, 1, 'e') AS manager_first_name FROM your_table;
内容的提问来源于stack exchange,提问作者mazur.os
相关产品推荐
相关产品推荐

