如何在mysql查询中对sting的数字部分执行计算

时间:2012-07-20 04:53:09

标签: mysql

由于我的客户端有一些限制,我需要在一个mysql查询中执行此操作。

我有一个varchar字段,其值类似于:3,050 wheels 我有另一个integer字段,其值为:2

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

我可以使用CONVERT将3,050转换为数字,但我不知道如何找到" "的索引,而且输出需要再次使用逗号进行格式化并连接返回字符串(非数字)部分。

请帮忙。

5 个答案:

答案 0 :(得分:1)

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

所有功能都描述为here

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

答案 1 :(得分:0)

您可以使用SUBSTRINGCAST

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

答案 2 :(得分:0)

这可能对您有用:

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

它应该在field1中的初始数值后重新附加任意数量的文本。如果3,500 wheels and spikes包含7,000 wheels and spikes,则field2应成为2

答案 3 :(得分:0)

要检查字段中是否有数字,请使用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]';

希望这对你有用......

答案 4 :(得分:0)

尝试此查询

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