如在mysql里面有这样一张表
table a
id   value
01   0.99*0.99
02   0.80*0.11a表的value列是字符串格式,怎么才能得到如下结果
id   value
01   0.98
02   0.08
也就是将a表的value值拆分后,再计算出结果(截取小数点后两位)。

解决方案 »

  1.   

    value中只有1个*?
    SELECT MID(value,1,INSTR(value,'*')-1)*
    RIGHT(value,INSTR(value,'*')-1) FROM  tt
      

  2.   

    select id,round(SUBSTRING_INDEX(value,'*',1)*SUBSTRING_INDEX(value,'*',-1),2) from a;
      

  3.   

    有的value字段的值不只两个,可能有多个,如“0.99*0.99*0.99*0.99*0.99*0.99”甚至更长。
      

  4.   

    在脚本程序中实现应该是不可能的,因为我需要对这个value字段进行排序,而且资料库的数据量是非常大的,大概在100万条以上。而且数据量还会增大所以只能用存储过程,但这样的话处理速度又会打折扣。各位大虾,有没有好的方法,或好的存储过程介绍介绍。或者有什么更好的建议。
      

  5.   

    我觉得用程序处理会好一些,用SPLIT函数,就可以得到一个拆分好的数组。如果你要排序,对数组排序的例子很多。
      

  6.   

    以下是我在mysql里面的查询语句。
    SELECT 
    X.WO_NBR,X.WO_CLOSE_DATE,X.WO_REL_DATE,X.XXCON_NBR,X.XXCON_DEP,X.XXCON_DATE,X.XXCON_LINE,X.XXCON_PART,
    GROUP_CONCAT(X.AVG SEPARATOR "*") AVG FROM 
    (SELECT WO_NBR,
           WO_CLOSE_DATE,
           WO_REL_DATE,
           XXCON_NBR,
           XXCON_DEP,
           XXCON_DATE,
           XXCON_LINE,
           XXCON_OP,
           XXCON_PART,
           SUM(XXCON_QTY_CHK) CHK,
           SUM(XXCON_QTY_REJ) REJ,
           truncate(1-SUM(XXCON_QTY_REJ)/SUM(XXCON_QTY_CHK),2) AVG
    FROM
    (SELECT WO_NBR,WO_CLOSE_DATE,WO_REL_DATE
      FROM WO_MSTR
     WHERE WO_REL_DATE BETWEEN '2011-02-01' AND '2011-02-28') A, XXCON_DET B
    WHERE  A.WO_NBR = B.XXCON_CHECKER
    GROUP BY XXCON_PART,XXCON_OP
    ORDER BY XXCON_PART) X
    GROUP BY X.WO_NBR
    ORDER BY X.XXCON_PART楼上几位的方法我之前就已经考虑过了,但觉得这样不是很好.
    这个查询里面的avg字段就是一楼的value字段。