例如,考虑如下表(table name=accounts)
account owner_ids
PA account sa123,rt458,hf678,de348f
RA account gg678n,fk980,rt458,hf678
在这里,我想从整个表中删除owner_ids "rt458" and "hf678"
,删除逗号后应该是完美的(我的意思是,删除后,剩余的所有者ID应该像以前一样用逗号分隔,列中不应该有任何不必要的逗号(
任何形式的帮助都很感激,帮我吧,伙计们
您可以使用REPLACE函数两次:
update accounts
set owner_ids = REPLACE(REPLACE(owner_ids,
',rt458' ),',hf678');
REPLACE每次出现search_string时都返回char,并用replacement_string替换。
或者您可以使用REGEXP_REPLACE通过regex:替换/删除这些值
update accounts
set owner_ids = REGEXP_REPLACE(owner_ids,
'(,rt458||,hf678)', '');
REGEXP_REPLACE通过允许您在字符串中搜索正则表达式模式来扩展REPLACE函数的功能。
要支持rt458是CSV列表中第一个条目的情况(正如@TimBiegeleisen所评论的(,您必须不允许逗号为:
update accounts
set owner_ids = REGEXP_REPLACE(owner_ids,
'(,{0,1}rt458||,{0,1}hf678)', '');
使用替换,您将需要双重呼叫:
update accounts
set owner_ids = REPLACE(REPLACE(REPLACE(REPLACE(owner_ids,
',rt458' ),',hf678', 'rt458,', 'hf678,');
您还可以看到从逗号分隔字符串中删除值的其他解决方案
UPDATE accounts
SET owner_ids = TRIM(BOTH ',' FROM
REPLACE(REPLACE(CONCAT(',', owner_ids, ','), ',rt458,', ''), ',hf678,', '')
);
首先在字段前面加上逗号CONCAT(',', owner_ids, ',')
,使其统一。
然后,从中删除,rt458,
和,hf678,
稍后删除开头和结尾的逗号,我们添加这些逗号以使结构统一。
这将在值之间保留单个逗号。
请注意,您应该更喜欢规范化
owner_ids
,以便易于处理此类更新。