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;