Sql 使用informix评估数学表达式字符串

Sql 使用informix评估数学表达式字符串,sql,expression,eval,informix,Sql,Expression,Eval,Informix,我需要从字符串计算一个数学表达式 字符串看起来像“1.00*1.00*4.00” 我该怎么做 差不多 Select field1, field2, EVAL("EXPRESSION") as float from table 那太好了 让我们创建一个测试用例: CREATE TABLE tab1( col1 DECIMAL(10,2), col2 DECIMAL(10,2), col3 DECIMAL(10,2), col4 VARCHAR(250) ); I

我需要从字符串计算一个数学表达式

字符串看起来像“1.00*1.00*4.00”

我该怎么做

差不多

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

那太好了

让我们创建一个测试用例:

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")
如果您是从列构建表达式,甚至是传递字符串,那么很简单:

SELECT  col1 * col2 * col3  AS from_field,
        1.00*1.00*4.00      AS from_string
FROM    tab1;
如果该值存储在列上,则必须以编程方式执行,以下是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();

让我们创建一个测试用例:

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")
如果您是从列构建表达式,甚至是传递字符串,那么很简单:

SELECT  col1 * col2 * col3  AS from_field,
        1.00*1.00*4.00      AS from_string
FROM    tab1;
如果该值存储在列上,则必须以编程方式执行,以下是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();

你好,多米尼克,你试过阅读手册吗?你好,当然,但我在手册里找不到正确的位置。你能给我一个提示吗?我问这个问题是因为你的问题缺乏你在这里提问时应该展示的研究成果的基本指示。在重读了这个问题之后,我认为做你期望的事情有点困难。将数据导入excel并在那里进行计算可能更容易。。。或者如果有人慷慨地给了你这方面的代码?这将是慷慨的。你也可以解释为什么你的问题不同于那一个:,或那一个,否则你可能会得到虚假的“重复”标志。谢谢你的回答。你说得对,你提到的问题是相似的。但是第一个与mysql相关——我希望Informix有一个解决方案。在第二本书中没有数学计算。嗨,多米尼克,你试过阅读手册吗?嗨,当然,但我没有在手册中找到正确的位置。你能给我一个提示吗?我问这个问题是因为你的问题缺乏你在这里提问时应该展示的研究成果的基本指示。在重读了这个问题之后,我认为做你期望的事情有点困难。将数据导入excel并在那里进行计算可能更容易。。。或者如果有人慷慨地给了你这方面的代码?这将是慷慨的。你也可以解释为什么你的问题不同于那一个:,或那一个,否则你可能会得到虚假的“重复”标志。谢谢你的回答。你说得对,你提到的问题是相似的。但是第一个与mysql相关——我希望Informix有一个解决方案。第二种方法没有数学计算。