我一直在尝试在表格中编辑/添加值字符串列(进程)。
字符串中的当前值如下:
1:38,25:39,41:101
我想要做的是在“X:”之后为每个值添加1000,所以在查询之后应该读取值:
1:1038,25:1039,41:1101
我看过CONCAT,但似乎只在某些参数中的字符串中插入一个值。有什么想法吗?
答案 0 :(得分:0)
您可以使用CAST
CONCAT
和SUBSTRING_INDEX
函数来获取所需的输出,例如:
SELECT
CONCAT(SUBSTRING_INDEX(value, ':', 1), ":", (CAST(SUBSTRING_INDEX(value, ':', -1) AS UNSIGNED) + 1000))
FROM test;
这是 SQL Fiddle 。
答案 1 :(得分:0)
使用变量可以帮助您实现所需目标:
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;
参考文献:
答案 2 :(得分:0)
您应该规范化数据并将其存储在单独的表中。也就是说,要回答您的问题,您可以使用这些查询来实现您的目标:
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;
只需确保将上述查询中的SELECT org FROM mytable LIMIT 1
替换为您需要编辑的字符串1:38,25:39,41:101
的查询。请注意,此示例仅显示如何在一个字符串中处理该值。如果您需要处理多行的值,则需要进一步调整......
检查sqlfiddle:http://sqlfiddle.com/#!9/bf6da4/1/0