Mysql字符串拆分并计算值

ulpyuxa 2011-04-06 10:05:57
如在mysql里面有这样一张表
table a
id value
01 0.99*0.99
02 0.80*0.11

a表的value列是字符串格式,怎么才能得到如下结果
id value
01 0.98
02 0.08


也就是将a表的value值拆分后,再计算出结果(截取小数点后两位)。
...全文
362 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ulpyuxa 2011-04-06
  • 打赏
  • 举报
回复
以下是我在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字段。
ulpyuxa 2011-04-06
  • 打赏
  • 举报
回复
关键是涉及到的数据量比较大,假设要处理一年的记录,而这一年记录在100亿条,如果我全部在程序中处理,那可能得等上好几个小时吧。
wwwwb 2011-04-06
  • 打赏
  • 举报
回复
在程序中处理好一点,对数组处理速度比较快
zuoxingyu 2011-04-06
  • 打赏
  • 举报
回复
我觉得用程序处理会好一些,用SPLIT函数,就可以得到一个拆分好的数组。如果你要排序,对数组排序的例子很多。
ulpyuxa 2011-04-06
  • 打赏
  • 举报
回复
在脚本程序中实现应该是不可能的,因为我需要对这个value字段进行排序,而且资料库的数据量是非常大的,大概在100万条以上。而且数据量还会增大

所以只能用存储过程,但这样的话处理速度又会打折扣。各位大虾,有没有好的方法,或好的存储过程介绍介绍。或者有什么更好的建议。
ACMAIN_CHM 2011-04-06
  • 打赏
  • 举报
回复
[Quote]有的value字段的值不只两个,可能有多个,如“0.99*0.99*0.99*0.99*0.99*0.99”甚至更长。[/Quote]这个就没办法了,用存储过程,或者建议还是直接在脚本程序中去实现比较合适。
zuoxingyu 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ulpyuxa 的回复:]
有的value字段的值不只两个,可能有多个,如“0.99*0.99*0.99*0.99*0.99*0.99”甚至更长。
[/Quote]

如果长度不定,可以写个存储过程去解析每个数字。
ulpyuxa 2011-04-06
  • 打赏
  • 举报
回复
有的value字段的值不只两个,可能有多个,如“0.99*0.99*0.99*0.99*0.99*0.99”甚至更长。
zuoxingyu 2011-04-06
  • 打赏
  • 举报
回复
select id,round(SUBSTRING_INDEX(value,'*',1)*SUBSTRING_INDEX(value,'*',-1),2) from a;
wwwwb 2011-04-06
  • 打赏
  • 举报
回复
value中只有1个*?
SELECT MID(value,1,INSTR(value,'*')-1)*
RIGHT(value,INSTR(value,'*')-1)

FROM tt

56,677

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧