如何计算mysql中字符串的值

如何计算mysql中字符串的值,mysql,Mysql,我在Mysql中有一个存储过程,在这个过程中我做了一些查询,得到一个字符串@str=5*2+1,然后我想计算这个字符串并返回一个数字。 就像在sql server中一样,我可以执行exec('select'+@str)并返回11 谢谢是的,从技术上讲你可以这样做,但这是一种危险的行为,所以这可能是一个非常糟糕的主意 人们不使用eval或类似的工具来做简单的数学是有原因的 PREPARE stmt1 FROM 'SELECT 5*2+1 as eval'; EXECUTE stmt1; DEALL

我在Mysql中有一个存储过程,在这个过程中我做了一些查询,得到一个字符串@str=5*2+1,然后我想计算这个字符串并返回一个数字。 就像在sql server中一样,我可以执行
exec('select'+@str)
并返回11


谢谢

是的,从技术上讲你可以这样做,但这是一种危险的行为,所以这可能是一个非常糟糕的主意

人们不使用
eval
或类似的工具来做简单的数学是有原因的

PREPARE stmt1 FROM 'SELECT 5*2+1 as eval';
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

您可以使用以下方法,但在使用动态查询时,请小心SQL注入:

prepare stmt1 from 'select 5*2+1';
execute stmt1;
deallocate prepare stmt1;
使用您的代码示例,尝试以下操作(注意SQL注入!)


为什么不直接调用
SELECT
。也可能是因为OP只是简化了一个例子。在数据库中存储SQL,甚至是其中的一部分,是一个非常糟糕的主意。MySQL没有客户端层提供的注入保护。@tadman我的回答中哪一个说它在数据库中存储sql语句?如果它不在数据库中,您可以直接发送
SELECT
查询。这似乎是为了避免创建一个永久存储过程,而不是创建一个通用工具来计算任意SQL,这总是以眼泪告终。mysql中的Exec不受支持。我已经试过了,我指的是
SELECT
部分。现在还不清楚你的目标是什么。
5*2+1
从哪里来?我有一个字符串@str=5*2+1,所以我想计算它,然后返回一个数字。你说
@str
是什么意思?在存储过程中?在SP中是的。我有一个存储过程,在这个过程中,我进行一些查询以获取字符串@str=5*2+1,然后我想计算这个字符串并返回一个数字。我刚刚尝试了这个查询,但它抛出了所有字符串,而不是结果:从“选择”中准备计算;使用@calc\执行计算;取消分配准备计算;然后它返回:((1*2)/3)*100/1000这是我的结果:无法加载您的屏幕截图。你能展示你使用的确切代码以及如何将代码传递给MySQL吗;从“选择”准备计算?作为结果';使用@calc\执行计算;取消分配准备计算;
set @Calc = concat('select ', '5*2+1', ' as result');
prepare stmt1 from @Calc;
execute stmt1;
deallocate prepare stmt1;