仅在前x个字符中进行条件替换

时间:2015-05-26 04:02:45

标签: mysql

我有一个相当大的MySQL数据库,我目前正在使用它。它存储一般联系信息。表名是'客户'我希望改变的专栏名为' serviceNumber'。

我们刚刚发现我们需要改变许多记录的格式。以下是详细信息:

此列中的大多数电话号码都包含我们的国家/地区代码(' 61400000000'),有些电话号码的格式仅为本地号码(' 0400000000')。 我知道我可以告诉MySQL通过并只是替换所有出现的' 614'与' 04',但问题是很多数字恰好包含' 614'在实际的电话号码本身。

我如何仅针对开始>' 614'?

的记录进行更换

2 个答案:

答案 0 :(得分:0)

我会使用以下方法:

update customers
   set serviceNumber = concat ('04', substring (serviceNumber, 4))
 where serviceNumber like '614%';

where子句将update限制为使用614编号为 的行,而set 1}}将其更改为04,然后删除614后的当前数字。

但是,您可能想要进行一些额外的健全性检查,例如确保长度正确。

这些是我认为的澳大利亚数字(给定+61前缀以及你在悉尼以外的事实)你可能有兴趣知道我的本地(八位数)数字以{{1开头(我们在西海岸这里很奇怪)。

可能还有其他人开始616,您不希望将某人的 本地 号码614更改为{{} 1}}。

由于澳大利亚的手机都是(目前)61431415,所以首先会有一个良好的首选:

0431415

您可能还对以下事实感兴趣:ACMA预计会在2017年开始分配614xx yyy zzz手机号码,而当前的update customers set serviceNumber = concat ('04', substring (serviceNumber, 4)) where serviceNumber like '614%' and char_length(serviceNumber) >= 11; 手机号码开始耗尽。如果你对前瞻性思维感兴趣,你可能至少应该考虑

答案 1 :(得分:0)

update tableName set number = concat ('04', substring (number, 4)) where number like '614%';

这可能对你有所帮助 1首先替换前3位数 然后我们用04

连接了现有的数字