Databricks拆分字符串遇SPLIT_part未定义错误,求提取括号内代码
在Databricks中提取字符串括号内内容(替代报错的SPLIT_part函数)
Spark SQL(Databricks基于Spark)并不支持PostgreSQL的SPLIT_part函数,这就是你报错的原因。以下是几种Spark原生的方法,可以提取patologia列中括号内的代码(比如从LESOES DO OMBRO (M75)中得到M75):
方法1:正则提取(最推荐,适配多数场景)
用regexp_extract直接匹配括号内的内容,逻辑清晰且容错性强:
SELECT patologia, regexp_extract(patologia, '\\((.*?)\\)', 1) AS codigo_patologia FROM your_table_name;
- 正则表达式
\\((.*?)\\):匹配成对的括号,(.*?)捕获括号内的任意内容(非贪婪匹配,避免多个括号时出错) - 第三个参数
1表示取第一个捕获组的结果,也就是括号内的内容
方法2:拆分字符串+取元素
用split按括号拆分字符串,再用element_at取目标元素(Spark 2.4及以上版本支持):
SELECT patologia, element_at(split(patologia, '\\(|\\)'), 2) AS codigo_patologia FROM your_table_name;
split(patologia, '\\(|\\)')会把示例字符串拆分为数组["LESOES DO OMBRO ", "M75", ""]element_at(..., 2)取数组的第二个元素,即括号内的内容
方法3:嵌套截取字符串
用两次substring_index实现截取:
SELECT patologia, substring_index(substring_index(patologia, '(', -1), ')', 1) AS codigo_patologia FROM your_table_name;
- 第一次
substring_index(patologia, '(', -1)取(之后的部分,得到M75) - 第二次
substring_index(..., ')', 1)取)之前的部分,最终得到M75
如果部分patologia值不含括号,上述方法都会返回空字符串或对应无效部分,你可以根据实际数据情况调整逻辑(比如加CASE WHEN判断)。
内容的提问来源于stack exchange,提问作者Mariana
相关产品推荐
相关产品推荐

