首页 >后端开发 >php教程 >mysql 如何改正?

mysql 如何改正?

WBOY
WBOY原创
2016-06-20 12:48:56885浏览

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 ??


好像是可以不要的,但是这样的话,应该可以实现的。

您好,我们是一支有激情有活力的创业团队,目的是教大学生编写代码成为一个合格的程序员。我们现有一个稳定的网站作为支撑,现在要开创新的板块,未来会寻求独立。我们现在有一些导师愿意加盟,但还是远远不够的,希望继续有像您一样的技术牛人的加盟,您只需利用您的碎片化时间就可以了,不知您是否有兴趣继续了解一下呢?

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn