我在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
請問我該如何解決這個問題?
uj5u.com熱心網友回復:
您可以使用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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408767.html
標籤:
