locate,regexp\u replace udfs hive替换列中的字符串

5rgfhyps  于 2021-06-28  发布在  Hive
关注(0)|答案(2)|浏览(437)

我有一张像下面这样的table

names    age  gender
v_mark   25   male
j_david  26   male
S_Rose   28   Female
mark     21   male

首先我需要找出名称值是否包含“下划线”,然后我需要根据特定条件将名称值的“下划线”替换为“空格”或“逗号”。
如果性别是男性,我需要将“下划线”替换为空格如果性别是女性,我需要将“下划线”替换为逗号。
我在google上搜索过,发现我需要使用locate(检查值中是否有下划线)和regexp\u replace(根据条件用逗号替换下划线) When 以及 Case 但是有个错误。下面是我的代码。

CASE
(
WHEN LOCATE("_",Table1.names)-1 > 0 AND Table1.gender='male'  THEN regexp_replace(T1.names, "_"," ")
WHEN LOCATE("_",Table1.names)-1 > 0 AND Table1.gender='Female'  THEN regexp_replace(T1.names, "_",",")
ELSE Table1.names
END
    ) AS names1

我需要这样的输出

names1    age  gender
v mark   25   male
j david  26   male
S,Rose   28   Female
mark     21   male

有人能帮我吗。

4urapxun

4urapxun1#

问题是在代码下面的case使用之后出现了“(”
locate(“,table1.names)-1>0和table1.gender='male'时使用大小写,然后使用regexp\u替换(t1.names,“,”),locate(“,table1.names)-1>0和table1.gender='female'时使用regexp\u替换(t1.names,“,”),否则table1.names以names1结尾

6jjcrrmo

6jjcrrmo2#

case语句和regex将为您提供所需的结果。

SELECT 
  CASE gender
    WHEN 'male' THEN regexp_replace(names, "_"," ")
    WHEN 'Female' THEN regexp_replace(names, "_",",")
  END AS names, 
  age, 
  gender
FROM table;

相关问题