2016-06-16 7 views
0

Ich muss einen mathematischen Ausdruck aus einer Zeichenfolge berechnen.Eval Math Ausdruck String mit Informix

Der String sieht aus wie "1.00 * 1.00 * 4.00"

Wie kann ich das tun?

So etwas wie

Select field1, field2, EVAL("EXPRESSION") as float from table 

wäre toll!

+0

Hallo Dominik, hast du versucht, die zu lesen manuell? –

+0

Hallo, sicher, aber ich habe nicht den richtigen Platz in der Bedienungsanleitung gefunden. Kannst du mir einen Hinweis geben? – Dominik00000

+0

Ich habe das gefragt, weil es Ihrer Frage an der grundlegenden Aussage über den Forschungsaufwand fehlte, den Sie zeigen sollten, wenn Sie hier fragen. Nachdem ich die Frage erneut gelesen habe, finde ich es etwas schwierig, das zu tun, was Sie erwarten. Es könnte einfacher sein, Daten in Excel zu importieren und dort zu berechnen ... oder wenn jemand großzügig genug ist, Ihnen den Code dafür zu geben? Das wäre in der Tat großzügig. –

Antwort

4

Lassen Sie uns einen Testfall erstellen:

CREATE TABLE tab1(
    col1 DECIMAL(10,2), 
    col2 DECIMAL(10,2), 
    col3 DECIMAL(10,2), 
    col4 VARCHAR(250) 
); 

INSERT INTO tab1 VALUES (1.0, 1.0, 4.0, "1.00*1.00*4.00") 

Wenn Sie den Ausdruck von Spalten bauen oder auch das Bestehen der Zeichenfolge ist es ganz einfach:

SELECT col1 * col2 * col3 AS from_field, 
     1.00*1.00*4.00  AS from_string 
FROM tab1; 

Wenn der Wert auf einer Spalte gespeichert wird Sie müssen es programmatisch tun, hier ist ein Beispiel für eine SPL:

CREATE FUNCTION get_eval() 
    RETURNING DECIMAL(10,2) AS eval; 

    DEFINE stmt  VARCHAR(250); 
    DEFINE eval_str VARCHAR(250); 
    DEFINE eval_dec DECIMAL(10,2); 

    FOREACH cur FOR 
     SELECT col4 
     INTO eval_str 
     FROM tab1 

     LET stmt = "SELECT " || eval_str || " as eval FROM sysmaster:sysdual INTO TEMP tmp_eval WITH NO LOG;"; 
     EXECUTE IMMEDIATE stmt; 

    END FOREACH 

    FOREACH eval FOR 
     SELECT eval 
     INTO eval_dec 
     FROM tmp_eval 
      RETURN eval_dec WITH RESUME; 
    END FOREACH 

    DROP TABLE tmp_eval; 

END FUNCTION; 

EXECUTE FUNCTION get_eval();