mysql-根据条件剪切行中的第一个字符串

mysql-根据条件剪切行中的第一个字符串,mysql,string,cut,Mysql,String,Cut,我对查询有新问题: 我想根据id使用一些新数据更新列“column”: UPDATE table SET column = CASE WHEN id = 2 THEN CONCAT(`column`, ',7') WHEN id = 3 THEN CONCAT(`column`, ',10') ELSE column END; 不幸的是,向列添加新值的开头必须有逗号,因为列将数据存储为逗号分隔的值。 例如,它看起来像这样: id | column -

我对查询有新问题:

我想根据id使用一些新数据更新列“column”:

UPDATE table SET column = CASE 
    WHEN id = 2 THEN CONCAT(`column`, ',7') 
    WHEN id = 3 THEN CONCAT(`column`, ',10')    
    ELSE column
    END;
不幸的是,向列添加新值的开头必须有逗号,因为列将数据存储为逗号分隔的值。 例如,它看起来像这样:

id | column
-------------
 2 | 3, 1, 20
 3 | 1, 5
id | column
-------------
 2 | ,7
 3 | ,10
执行查询后,我得到:

id | column
-------------
 2 | 3, 1, 20, 7
 3 | 1, 5, 10
到现在为止一切都很好。不幸的是,如果我更新的列为空,则所有列都以逗号开头,如下所示:

id | column
-------------
 2 | 3, 1, 20
 3 | 1, 5
id | column
-------------
 2 | ,7
 3 | ,10
从数据库中获取数据时会出现一些问题,因为当我分解它时,会使第一个数组值为空。我想在更新表时删除第一个逗号。 我想我应该做一些“if”语句来检查“column”(带有char_length)的长度,如果它是空的,则不首先更新,以逗号开头。 你能帮我正确的语法吗

总结: 如果“column”存在,如何进行适当的查询,使用以逗号开头的值更新如上所述的列。如果“column”为空,则使用变量更新它,而不以逗号开头。

这样如何:

UPDATE table SET column = CASE 
    WHEN id = 2 THEN CONCAT(`column`, IF( CHAR_LENGTH(column)=0, '', ',' ), '7' ) 
    WHEN id = 3 THEN CONCAT(`column`, IF( CHAR_LENGTH(column)=0, '', ',' ), '10')    
    ELSE column
    END;
MySQL的参考手册:和。

这个怎么样:

UPDATE table SET column = CASE 
    WHEN id = 2 THEN CONCAT(`column`, IF( CHAR_LENGTH(column)=0, '', ',' ), '7' ) 
    WHEN id = 3 THEN CONCAT(`column`, IF( CHAR_LENGTH(column)=0, '', ',' ), '10')    
    ELSE column
    END;

MySQL参考手册:和。

正确的方法是不要在列中使用CSV,而是使用单独的关联表。然后,只要在关联表中插入或删除行,就不会有任何问题

但是,如果必须坚持当前模式,则可以执行以下操作:

update table
set column = case
    when id = 2 then concat(column, if(coalesce(column, '') = '',  '7',  ',7'))
    when id = 3 then concat(column, if(coalesce(column, '') = '', '10', ',10'))
    end
where id in (2, 3)
如果不包括,则会在
中遇到空值问题


另外请注意,我删除了您的
else
,而选择了WHERE子句,更新的内容不要超过需要。

正确的方法是不要在列中使用CSV,而是使用单独的关联表。然后,只要在关联表中插入或删除行,就不会有任何问题

但是,如果必须坚持当前模式,则可以执行以下操作:

update table
set column = case
    when id = 2 then concat(column, if(coalesce(column, '') = '',  '7',  ',7'))
    when id = 3 then concat(column, if(coalesce(column, '') = '', '10', ',10'))
    end
where id in (2, 3)
如果不包括,则会在
中遇到空值问题


另外请注意,我删除了您的
else
以支持WHERE子句,不要更新超过您需要的内容。

谢谢,我试着处理关于关联表的问题。正如你所提议的,我还提出了其他问题,汉克斯,我试着处理一下关于联合表格的问题。我还按照你的建议做了其他事情