如何将SQL查询获取的数学表达式字符串转换为对应计算结果
你可以直接在SQL查询层对equation字段做拆分计算实现需求,主流数据库的实现方案如下:
通用思路
字段值里的x是乘号占位符,只需要把x左右的两个数值拆分出来转成整数相乘即可,相比动态执行表达式的方案,拆分计算性能更高也没有SQL注入风险。
各数据库实现代码
- MySQL 版本
SELECT CAST(TRIM(SUBSTRING_INDEX(equation, 'x', 1)) AS UNSIGNED) * CAST(TRIM(SUBSTRING_INDEX(equation, 'x', -1)) AS UNSIGNED) AS equation FROM eqs;
- PostgreSQL 版本
SELECT (split_part(trim(equation), 'x', 1)::integer) * (split_part(trim(equation), 'x', 2)::integer) AS equation FROM eqs;
- SQL Server 版本
SELECT CAST(LTRIM(RTRIM(LEFT(equation, CHARINDEX('x', equation)-1))) AS INT) * CAST(LTRIM(RTRIM(RIGHT(equation, LEN(equation) - CHARINDEX('x', equation)))) AS INT) AS equation FROM eqs;
如果后续你的表达式规则更复杂(不只是两个数相乘),可以对应使用各数据库的动态SQL执行能力实现通用表达式计算。
内容的提问来源于stack exchange,提问作者Anton。
相关产品推荐
相关产品推荐

