字符串字段MySQL中的计算

字符串字段MySQL中的计算,mysql,Mysql,我一直在尝试在表中编辑/添加值字符串列(进程) 字符串中的当前值如下所示: 1:38,25:39,41:101 我要做的是在“X:”之后的每个值上加1000,因此在查询之后,这些值应该是: 1:1038,25:1039,41:1101 我已经看过CONCAT,但它似乎只在特定参数内的字符串中插入一个值。有什么想法吗?您可以使用CASTCONCAT和SUBSTRING\u INDEX函数来获得所需的输出,例如: SELECT CONCAT(SUBSTRING_INDEX(value, ':'

我一直在尝试在表中编辑/添加值字符串列(进程)

字符串中的当前值如下所示:

1:38,25:39,41:101
我要做的是在“X:”之后的每个值上加1000,因此在查询之后,这些值应该是:

1:1038,25:1039,41:1101

我已经看过CONCAT,但它似乎只在特定参数内的字符串中插入一个值。有什么想法吗?

您可以使用
CAST
CONCAT
SUBSTRING\u INDEX
函数来获得所需的输出,例如:

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

以下是

变量的使用可以帮助您实现您想要的:

  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;
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 @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;
    
    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:

    现在您知道为什么规范化有帮助了@Paul所提供的示例显示的是用逗号分隔的单行还是多行?所讨论的数据不在单独的行中。因此,这不能回答给定的问题。不确定这是否回答了问题,但决不能在同一语句中读写同一个用户变量。无法保证处理顺序,因此无法保证结果。