如何使用 spark sql 从字符串末尾删除子字符串?

How to remove substring from the end of string using spark sql?

我在 Databricks 上使用 spark sql 做数据分析,我想格式化一些字段,但这有点棘手。

我有两个字段,perfumebrand,我想要的是只从末尾删除 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