2017-12-26 11 views
0

Ich fange gerade an, Redshift zu lernen, und ich versuche, eine Funktion zu konvertieren, die auf einem MySQL-Server verwendet wird, um in Redshift zu arbeiten. Ich hatte bis jetzt kein Glück, in der Hoffnung, dass die Stackoverflow-Zauberer die Richtung angeben können.Umwandlung der MySQL-Funktion in Redshift

CREATE FUNCTION SS_Ans_to_Num(answer VARCHAR(1000)) 
RETURNS INT 
BEGIN 
declare answer_num int(11); 

if answer = 'No' then SET answer_num = 0; 
elseif answer IN ('N/A – I did not receive this training', 'N/C - No recibí esta capacitación') then SET answer_num = 0; 
elseif answer IN ('Strongly Disagree', 'Totalmente en desacuerdo') then SET answer_num = 1; 
elseif answer IN ('Poor','Mala') then SET answer_num = 1; 
elseif answer IN ('Disagree','En desacuerdo') then SET answer_num = 2; 
elseif answer IN ('Fair','Regular') then SET answer_num = 2; 
elseif answer IN ('Neutral','Neutro') then SET answer_num = 3; 
elseif answer IN ('Agree','De acuerdo') then SET answer_num = 4; 
elseif answer IN ('Very Good','Muy buena') then SET answer_num = 4; 
elseif answer IN ('Yes','Sí') then SET answer_num = 5; 
elseif answer IN ('Strongly Agree','Totalmente de acuerdo') then SET answer_num = 5; 
elseif answer IN ('Excellent','Excelente') then SET answer_num = 5; 
else SET answer_num = 0; 
end if; 

return (answer_num); 

END; 

Ich dachte, etwas in dieser Richtung funktionieren würde, aber es funktioniert nicht:

CREATE FUNCTION SS_Ans_to_Num(answer VARCHAR(1000)) 
RETURNS INTEGER 
STABLE 
AS 
    $$ 
    CASE 
    WHEN answer = 'No' THEN SET answer_num = 0; 
    WHEN answer IN ('N/A – I did not receive this training', 'N/C - No recibí esta capacitación') then SET answer_num = 0; 
    WHEN answer IN ('Strongly Disagree', 'Totalmente en desacuerdo') then SET answer_num = 1; 
    WHEN answer IN ('Poor','Mala') then SET answer_num = 1; 
    WHEN answer IN ('Disagree','En desacuerdo') then SET answer_num = 2; 
    WHEN answer IN ('Fair','Regular') then SET answer_num = 2; 
    WHEN answer IN ('Neutral','Neutro') then SET answer_num = 3; 
    WHEN answer IN ('Agree','De acuerdo') then SET answer_num = 4; 
    WHEN answer IN ('Very Good','Muy buena') then SET answer_num = 4; 
    WHEN answer IN ('Yes','Sí') then SET answer_num = 5; 
    WHEN answer IN ('Strongly Agree','Totalmente de acuerdo') then SET answer_num = 5; 
    WHEN answer IN ('Excellent','Excelente') then SET answer_num = 5; 
    ELSE SET answer_num = 0; 
    END CASE; 

RETURN (answer_num); 

$$ LANGUAGE SQL 

Antwort

2

Die korrekte Syntax wäre:

CREATE OR REPLACE FUNCTION SS_Ans_to_Num(TEXT) 
RETURNS INTEGER 
STABLE 
AS 
    $$ 
    SELECT CASE 
    WHEN $1 = 'No' THEN 0 
    WHEN $1 IN ('N/A – I did not receive this training', 'N/C - No recibí esta capacitación') THEN 0 
    WHEN $1 IN ('Strongly Disagree', 'Totalmente en desacuerdo') THEN 1 
    WHEN $1 IN ('Poor','Mala') THEN 1 
    WHEN $1 IN ('Disagree','En desacuerdo') THEN 2 
    WHEN $1 IN ('Fair','Regular') THEN 2 
    WHEN $1 IN ('Neutral','Neutro') THEN 3 
    WHEN $1 IN ('Agree','De acuerdo') THEN 4 
    WHEN $1 IN ('Very Good','Muy buena') THEN 4 
    WHEN $1 IN ('Yes','Sí') THEN 5 
    WHEN $1 IN ('Strongly Agree','Totalmente de acuerdo') THEN 5 
    WHEN $1 IN ('Excellent','Excelente') THEN 5 
    ELSE 0 
    END 

    $$ LANGUAGE SQL 

Die Syntax einer SQL-Anweisung ähnlich ist anstatt eine Verfahrenssprache. Wenn Sie eine programmatischere Sprache verwenden möchten, verwenden Sie language plpythonu anstelle von language SQL.

Siehe: CREATE FUNCTION Dokumentation