字符串字段中的计算MySQL

问题描述:

我一直在尝试在表中编辑/添加值字符串列(进程)。字符串字段中的计算MySQL

字符串中的电流值是如下:

1:38,25:39,41:101 

我想要做的就是加1000后的每一个值“X:”这样的查询后,值应为:

1:1038,25:1039,41:1101 

我曾看过CONCAT,但似乎只在特定参数内插入一个值到字符串中。有任何想法吗?

+2

现在你知道为什么正常化帮助! – GurV

+0

@Paul问题提供的示例显示用逗号分隔的单行或多行? –

您可以使用CASTCONCATSUBSTRING_INDEX函数来获得所需要的输出,例如:

SELECT 
CONCAT(SUBSTRING_INDEX(value, ':', 1), ":", (CAST(SUBSTRING_INDEX(value, ':', -1) AS UNSIGNED) + 1000)) 
FROM test; 

这里的SQL Fiddle

+0

有问题的数据是**不是**在单独的行中。因此,这不能回答给定的问题。 – GurV

使用变量可以帮助你实现你想要什么:

select @pre := SUBSTRING_INDEX(SUBSTRING_INDEX(`column_name`, ':', 1), '0', -1), 
    @post := SUBSTRING_INDEX(SUBSTRING_INDEX(`column_name`, ':', 2), '0', -1), 
    concat(@pre,":",@post+1000) as required_value from table_name; 

参考文献:

  1. 使用的变量: https://dev.mysql.com/doc/refman/5.7/en/user-variables.html
  2. 为SUBSTRING_INDEX: https://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring-index
+0

不知道这是否回答这个问题,但**从不**在同一个语句中读写相同的用户变量。处理的顺序不能保证,因此,结果。 – GurV

呦你应该规范化数据并将其存储在一个单独的表中。这就是说,要回答你的问题,你可以使用这些查询来实现你想要的:

CREATE TEMPORARY TABLE temp (val VARCHAR(50)); 
SET @str = CONCAT("INSERT INTO temp (val) VALUES ('",REPLACE((SELECT org FROM mytable LIMIT 1), ",", "'),('"),"');"); 
PREPARE st FROM @str; 
EXECUTE st; 

SELECT 
GROUP_CONCAT(DISTINCT CONCAT(SUBSTRING_INDEX(val, ':', 1), ":", (CAST(SUBSTRING_INDEX(val, ':', -1) AS UNSIGNED) + 1000))) 
FROM temp; 

只需确保在您的查询,返回1:38,25:39,41:101你需要编辑字符串上面的查询,以取代SELECT org FROM mytable LIMIT 1。请注意,此示例仅显示如何处理一个字符串中的值。如果你需要处理多行的值,你需要调整多一点...

检查sqlfiddle:http://sqlfiddle.com/#!9/bf6da4/1/0