如何使用REGEX替换列中的字符串

时间:2015-06-25 16:06:52

标签: mysql regex

我有一张参考手机号码的表格,但它们并非都是国际格式。在mobile列中,我有很多记录,我需要将1作为第一个字符的所有记录更改为491,并保持其余记录不变。我试过这个:

UPDATE test
SET mobile=(REPLACE (mobile,'1','491'));

但它会将1512231178转换为4915122349149178。它应该是491512231178。我想我需要REGEXP '^1'中的REPLACE

如何通过简单的更新来完成此操作?

2 个答案:

答案 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, '%')
;