2016-07-18 12 views
0

Ich habe eine Tabelle, wie untenLocate REGEXP_REPLACE UDF Hive Zeichenfolge in einer Spalte zu ersetzen

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

Zuerst habe ich den Namen Werte enthält „Unterstrich“ ist oder nicht, dann ich brauche zu ersetzen „Strich findout müssen "mit" Leerzeichen "oder" Komma "Name Werte basierend auf der spezifischen Bedingung. Wenn das Geschlecht männlich ist, muss ich "Unterstrich" durch Leerzeichen ersetzen Wenn Geschlecht weiblich ist, muss ich "Unterstrich" durch Komma ersetzen.

Ich habe Suche in Google, und ich fand, dass ich verwenden Locate (überprüfen Sie die „Unterstrich“ im Wert dort) und REGEXP_REPLACE (Um den Unterstrich mit Komma ersetzen basiert auf Bedingung) Ich habe versucht, When und Case aber Fehler bekommen. Unten ist mein Code.

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 

ich brauche die Ausgabe wie

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

Kann mir jemand helfen.

Antwort

1

Ausgabe ist mit '(' nach Fall bei Temperaturen unter Code

CASE WENN LOCATE ("_", Table1.names) -1> 0 AND Table1.gender = 'männlich' THEN regexp_replace (T1.Name, "", "") WENN LOCATE ("", Table1.names) -1> 0 UND Table1.gender = 'weiblich' DANN regexp_replace (T1.names, "_", ", ") ELSE Tabelle1.Namen ENDE AS Namen1

0

Fallanweisungen und Regex geben Ihnen die gewünschten Ergebnisse.

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