2016-07-18 3 views
0

У меня есть таблица, как показано нижеРасположить, REGEXP_REPLACE UDFs улей, чтобы заменить строку в столбце

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

Сначала мне нужно Findout значения имен содержит «подчеркивание» или нет, тогда мне нужно заменить «подчеркивание «с« пробелом »или« запятой »имя значений, основанных на конкретном состоянии.

Если пол мужчина, мне нужно заменить «подчеркивание» пробелом Если пол женский, мне нужно заменить «подчеркивание» запятой.

Я сделал поиск в Google, и я обнаружил, что мне нужно использовать Locate (для проверки «подчеркивание» есть в значении) и regexp_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 

Может кто-нибудь мне помочь.

ответ

1

вопрос с '(' после использования кода случае ниже

СЛУЧАЙ КОГДА LOCATE ("_", Table1.names) -1> 0 и Table1.gender = 'мужской' ТОГДА regexp_replace (T1.names, "", "") WHEN LOCATE ("", Table1.names) -1> 0 AND Table1.gender = 'Female' THEN regexp_replace (T1.names, "_", ", ") ELSE Таблица1.names END AS имена1

0

Операторы case и Regex дадут вам желаемые результаты.

SELECT 
    CASE gender 
    WHEN 'male' THEN regexp_replace(names, "_"," ") 
    WHEN 'Female' THEN regexp_replace(names, "_",",") 
    END AS names, 
    age, 
    gender 
FROM table; 
Смежные вопросы