Mysql 计算数学表达式

Mysql 计算数学表达式,mysql,sql,Mysql,Sql,我有一个类型为varchar的列,这个列的值是数学运算(只是加法和减法运算) 有没有可能,那就评估一下这个表达式?所需要的结果是: col ---------- 8 2 -0.5 由于您不能在创建函数中使用执行立即的或准备好的语句(这将有助于使用简单的CONCAT(“SELECT”,expr,“FROM dual”)计算表达式)),请参见下面的解决方案,该解决方案使用实际计算数学表达式的函数(因为您的问题只涉及带有+和-运算符的简单表达式) col ---------- 8 2 -0.5

我有一个类型为
varchar
的列,这个列的值是数学运算(只是加法和减法运算)

有没有可能,那就评估一下这个表达式?所需要的结果是:

col
---------- 
8
2
-0.5

由于您不能在
创建函数中使用
执行立即的
或准备好的语句
(这将有助于使用简单的
CONCAT(“SELECT”,expr,“FROM dual”)计算表达式)
),请参见下面的解决方案,该解决方案使用实际计算数学表达式的函数(因为您的问题只涉及带有
+
-
运算符的简单表达式)

col
---------- 
8
2
-0.5
DELIMITER $$

CREATE FUNCTION calc(expr VARCHAR(255)) RETURNS FLOAT
BEGIN
  DECLARE result FLOAT;
  DECLARE operand VARCHAR(255);
  DECLARE operator INT;
  DECLARE i INT;
  DECLARE c CHAR;

  SET i = 1;
  SET result = 0;
  SET operand = 0;
  SET operator = 1;

  WHILE(i <= LENGTH(expr)) DO
    SET c = SUBSTR(expr, i, 1);

    IF c = '+' THEN
        SET result = result + operator * operand;
        SET operator = 1;
        SET operand = '';
    ELSEIF c = '-' THEN
        SET result = result + operator * operand;
        SET operator = -1;
        SET operand = '';
    ELSE
        SET operand = CONCAT(operand, c);
    END IF;

    SET i = i + 1;
  END WHILE;

  SET result = result + operator * operand;

  RETURN result;
END$$
SELECT calc(col) FROM tbl;