如何使用 spark sql 从字符串末尾删除子字符串?
How to remove substring from the end of string using spark sql?
我在 Databricks 上使用 spark sql 做数据分析,我想格式化一些字段,但这有点棘手。
我有两个字段,perfume
和 brand
,我想要的是只从末尾删除 brand
名称 perfume
列。
这是一个例子:
我已经试过了:
SELECT substring_index(perfume,brand,1),brand FROM global_temp.gv_web
此方法仅适用于某些字段,但在某些情况下,它会从香水字段中删除所有名称,如下例所示:
删除的字段是:
Halloween Fever Halloween
Versace Pour Femme Versace
Clinique Happy Summer Spray 2009 Clinique
请问我该如何解决这个问题?
您可以将 regexp_replace
函数与此正则表达式一起使用:
(\s*BRAND\s*)*$ # removes all brand names that comes at the end
如果香水名称与品牌名称相同,则 regexp_replace
的输出将为空字符串,使用 when 表达式可以检查它是否为空,然后使用品牌名称:
SELECT CASE WHEN trim(regexp_replace(perfume, format_string('(\s*%s\s*)*$', brand), '')) <> ''
THEN regexp_replace(perfume, format_string('(\s*%s\s*)*$', brand), '')
ELSE brand
END AS perfume,
brand
FROM global_temp.gv_web
我在 Databricks 上使用 spark sql 做数据分析,我想格式化一些字段,但这有点棘手。
我有两个字段,perfume
和 brand
,我想要的是只从末尾删除 brand
名称 perfume
列。
这是一个例子:
我已经试过了:
SELECT substring_index(perfume,brand,1),brand FROM global_temp.gv_web
此方法仅适用于某些字段,但在某些情况下,它会从香水字段中删除所有名称,如下例所示:
删除的字段是:
Halloween Fever Halloween
Versace Pour Femme Versace
Clinique Happy Summer Spray 2009 Clinique
请问我该如何解决这个问题?
您可以将 regexp_replace
函数与此正则表达式一起使用:
(\s*BRAND\s*)*$ # removes all brand names that comes at the end
如果香水名称与品牌名称相同,则 regexp_replace
的输出将为空字符串,使用 when 表达式可以检查它是否为空,然后使用品牌名称:
SELECT CASE WHEN trim(regexp_replace(perfume, format_string('(\s*%s\s*)*$', brand), '')) <> ''
THEN regexp_replace(perfume, format_string('(\s*%s\s*)*$', brand), '')
ELSE brand
END AS perfume,
brand
FROM global_temp.gv_web