我有一张参考手机号码的表格,但它们并非都是国际格式。在mobile
列中,我有很多记录,我需要将1
作为第一个字符的所有记录更改为491
,并保持其余记录不变。我试过这个:
UPDATE test
SET mobile=(REPLACE (mobile,'1','491'));
但它会将1512231178
转换为4915122349149178
。它应该是491512231178
。我想我需要REGEXP '^1'
中的REPLACE
。
如何通过简单的更新来完成此操作?
答案 0 :(得分:3)
您可以这样做:
UPDATE test SET mobile = '49' + mobile
where mobile like '1%'
答案 1 :(得分:1)
Giorgi Nakeuri's clever problem substitution(替换前缀)适用于您的特定示例。在其他情况下,无法以这种方式简化问题,您可以使用INSERT字符串函数,它几乎完全符合您的要求:将特定长度的子字符串替换为另一个特定位置的子字符串子。它不允许你也指定旧的子字符串匹配特定的值,但你可以使用WHERE子句,就像Giorgi那样:
UPDATE
test
SET
mobile = INSERT(mobile, 1, 1, '491')
WHERE
mobile LIKE '1%'
;
如果您需要对旧的和新的子字符串进行参数化,那么您可以这样做:
UPDATE
test
SET
mobile = INSERT(mobile, 1, LENGTH(@OldValue), @NewValue)
WHERE
mobile LIKE CONCAT(@OldValue, '%')
;