例如,考虑如下表格(scp -o "ForwardAgent yes"
table name=accounts)
在这里,我想从整个表中删除account owner_ids
PA account sa123,rt458,hf678,de348f
RA account gg678n,fk980,rt458,hf678
,并且删除逗号后应该是完美的(我的意思是在删除之后,其余的owner_id也应像以前一样用逗号分隔,并且不应有任何不必要的逗号在该列中)
感谢您的帮助,
答案 0 :(得分:0)
您可以两次使用REPLACE功能:
update accounts
set owner_ids = REPLACE(REPLACE(owner_ids,
',rt458' ),',hf678');
REPLACE在每次出现search_string并替换为replace_string的情况下返回char。
或者您可以使用REGEXP_REPLACE通过正则表达式替换/删除这些值:
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,');
您还可以看到other solutions从逗号分隔的字符串中删除值
答案 1 :(得分:0)
UPDATE accounts
SET owner_ids = TRIM(BOTH ',' FROM
REPLACE(REPLACE(CONCAT(',', owner_ids, ','), ',rt458,', ''), ',hf678,', '')
);
首先在字段前面加上逗号CONCAT(',', owner_ids, ',')
,以使其统一。
然后,从其中删除,rt458,
和,hf678,
。
此后,我们在开头和结尾处都删除了逗号,以使结构统一。
这将在值之间保持单个逗号。
请注意,您应该更喜欢对
owner_ids
进行规范化处理,以便于处理此类更新。