我有一个场景。我有一个名为card_no的字段。有些条目是空白的。我们不想处理这个问题。有些有16位整数,有些有我需要的正确数据。我需要的是我想选择所有16位整数的记录,并用xxxxxxxxxxxxLAST4DIGITS(信用卡格式)替换它们。我能通过mysql做到吗?
答案 0 :(得分:1)
您不必选择行。
您可以将UPDATE应用于与条件匹配的行的子集。
UPDATE scenario
SET card_no = CONCAT('xxxxxxxxxxxx', RIGHT(card_no, 4))
WHERE LENGTH(card_no) = 16
答案 1 :(得分:0)
是。但是您必须将此字段设置为char(4)
,因为您可能希望将数字0002存储为 0002 而不仅仅是2.所以我首先更新字段的数据类型然后更新字段根据需要输入。
-- update datatype
alter table `cards`
modify column `card_no` char(4);
-- update values in card_no
update `cards`
set `card_no` = LPAD(if(length(`card_no`) > 4, substr(`card_no`, -4, 4), `card_no`), 4, '0')
where `card_no` is not null;
' xxx'你可以在应用程序代码端执行append操作,否则它会在db中占用额外的内存。