字符串字段中的计算MySQL
我一直在尝试在表中编辑/添加值字符串列(进程)。字符串字段中的计算MySQL
字符串中的电流值是如下:
1:38,25:39,41:101
我想要做的就是加1000后的每一个值“X:”这样的查询后,值应为:
1:1038,25:1039,41:1101
我曾看过CONCAT,但似乎只在特定参数内插入一个值到字符串中。有任何想法吗?
您可以使用CAST
CONCAT
和SUBSTRING_INDEX
函数来获得所需要的输出,例如:
SELECT
CONCAT(SUBSTRING_INDEX(value, ':', 1), ":", (CAST(SUBSTRING_INDEX(value, ':', -1) AS UNSIGNED) + 1000))
FROM test;
这里的SQL Fiddle。
有问题的数据是**不是**在单独的行中。因此,这不能回答给定的问题。 – 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;
参考文献:
不知道这是否回答这个问题,但**从不**在同一个语句中读写相同的用户变量。处理的顺序不能保证,因此,结果。 – 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
现在你知道为什么正常化帮助! – GurV
@Paul问题提供的示例显示用逗号分隔的单行或多行? –