如何在mysql查询中对数字部分进行计算

问题描述:

由于客户端的一些限制,我需要在一个mysql查询中执行此操作。如何在mysql查询中对数字部分进行计算

我有一个varchar领域,具有价值,如:3,050 wheels 我还有一个integer领域,具有价值:2

我需要查询返回我6,100 wheels

我大概可以使用CONVERT将3,050转换为数字,但我不知道如何找到" "的索引,而且输出再次需要使用逗号格式化,并与字符串连接在一起(non-数字)部分。

请帮忙。

使用SUBSTRING_INDEX选择字符串的相应部分,并FORMAT将数字转换回字符串。

所有功能描述为here

CONCAT(FORMAT(CONVERT(SUBSTRING_INDEX(f, ' ', 1), UNSIGNED) * g, 0), 
     ' ', 
     SUBSTRING_INDEX(f,' ',-1)) 
+0

谢谢,一个问题,我将如何处理超过一个的话吗?像:'3,050个车轮和尖刺'?如果我只是说'-1'作为索引,它只会抓住'spikes',我不能确定会有多少单词 – Bluemagica 2012-07-20 05:14:03

+0

然后,您可能需要使用'LOCATE'和'SUBSTR'来获取单词部分。 – 2012-07-20 05:15:44

您可以使用SUBSTRINGCAST

SELECT CAST(SUBSTRING_INDEX(field1, ' ', -1) AS UNSIGNED)*field2 as result, FROM tableName ; 

这可能会为你工作:

CONCAT(FORMAT(CAST(REPLACE(LEFT(field1, locate(' ', field1)-1), ',', '') AS UNSIGNED) * field2, 0), 
     MID(field1, LOCATE(' ', field1))) 

应该在field1初始数值后,再追加任意数量的文本。如果field2包含2,那么3,500 wheels and spikes应该变成7,000 wheels and spikes

要检查数量是有在该领域再使用MySQL Regular Expression Method,找到索引你可以使用SUBSTRING_INDEX并可以进一步计算进行,如

SELECT CONVERT(
    CONCAT(
     SUBSTRING_INDEX(field,",",1), 
     SUBSTRING_INDEX(
      SUBSTRING_INDEX(field,",",-1), " ", 1) 
      ), UNSIGNED) AS NO 
FROM table_name 
WHERE field REGEXP '[0-9]'; 

希望这会为你...

工作

尝试此查询

select 
    concat(convert(substring_index(fieldName, ' ', 1), decimal) * intField, 
    ',', substr(fieldName, length(substring_index(fieldName, ' ', 1))+1)) 
    as yourField 
    from tableName