mysql 如何改正?
SELECT (SELECT REPLACE('500x1x10','x','*') AS a)/5000; 这个结果得到0.1,但是实际应该是1,怎么去改正?
回复讨论(解决方案)
字符串形态的表达式是不会被运算的
mysql 并没有类似 eval 的函数,或许你可以自己写一个
对于你的这个例子,可以写作
SELECT substring_index(a,'*',1) * substring_index(substring_index(a,'*',2),'*',-1) * substring_index(substring_index(a,'*',3),'*',-1)
from (select REPLACE('500x1x10','x','*') AS a) t
但不具备普遍意义
如果mysql字段存储500x1x10字符串,但是计算的时候我需要将x替换成*,才可以进行计算。
可以查询出来了用php计算就简单多了
SELECT process.fid,SUM(CASE WHEN (product.box_product_dimensions/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS sumweight, (CASE WHEN (product.box_product_dimensions/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS weight FROM `process` LEFT JOIN product ON product.pid=process.pid WHERE 1 AND process.receiver_id>0 AND statu="3" AND property="转仓单" AND isover="N" GROUP BY fid
这是我sql当中其中一段sql,贴出来给你看下。如果计算拿到程序里面,就不是很方便。
product.box_product_dimensions 存储的是字符串,形如:14x12x36 需要计算的话,替换改成14*12*36
你#4的代码与你主贴的问题根本就不是一回事
你#4的代码与你主贴的问题根本就不是一回事
SELECT process.sku,process.fid,SUM(CASE WHEN (REPLACE(product.box_product_dimensions,'x','*')/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS sumweight,
(CASE WHEN (REPLACE(product.box_product_dimensions,'x','*')/5000)>box_shipping_weight THEN product.box_product_dimensions/5000 ELSE box_shipping_weight END ) AS weight FROM `process`
LEFT JOIN product ON product.pid=process.pid WHERE 1 AND process.receiver_id>0 AND statu="3" AND property="转仓单" AND isover="N" GROUP BY fid
product.box_product_dimensions 存储的是字符串,形如:14x12x36
那我#1已经明确的告诉你了,除非你自己写一个函数,否则是不可能指行字符串中的表达式的
那我#1已经明确的告诉你了,除非你自己写一个函数,否则是不可能指行字符串中的表达式的
SELECT process.sku,process.comment2,SUM(CASE WHEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000)>box_shipping_weight THEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000)ELSE box_shipping_weight END ) AS sumweight, (CASE WHEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000)>box_shipping_weight THEN (SELECT (SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))*(SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(box_product_dimensions,'x',2),'x',-1))*(SELECT SUBSTRING_INDEX(box_product_dimensions,'x',-1))/5000) ELSE box_shipping_weight END ) AS weight FROM `process` LEFT JOIN product ON product.pid=process.pid WHERE 1 AND process.receiver_id>0 AND statu="3" AND property="转仓单" AND isover="N" GROUP BY comment2
( SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))???
为什么要 SELECT ??
( SELECT SUBSTRING_INDEX(box_product_dimensions,'x',1))???
为什么要 SELECT ??
好像是可以不要的,但是这样的话,应该可以实现的。
您好,我们是一支有激情有活力的创业团队,目的是教大学生编写代码成为一个合格的程序员。我们现有一个稳定的网站作为支撑,现在要开创新的板块,未来会寻求独立。我们现在有一些导师愿意加盟,但还是远远不够的,希望继续有像您一样的技术牛人的加盟,您只需利用您的碎片化时间就可以了,不知您是否有兴趣继续了解一下呢?