在SQL数据库中排列移动号码

所有的手机号码已经进入格式447XXXXXXXX,我想这些号码格式为07XXXXXXXXXX。

我正在尝试以下查询:

UPDATE stack SET Telephone= REPLACE(Telephone,'447','07') 

然而,如果一个数字包含447这个也将被replace,我想用通配符来replace每一列的前两个4。 更新所有49,000个条目的最好方法是什么,我已经创build了一个备份以防万一。

UPDATE

看起来数字被设置为错误的格式,所以下面的查询被用来把它们放在正确的格式中:

 ALTER TABLE stack ALTER COLUMN Telephone VARCHAR(15) 

现在所有的数字都显示在一个奇怪的格式:4.47944e + 011

将数据types更改为varchar (数字数据types不存储前导零)。 要做到这一点,您需要先将其更改为bigint ,以使转换工作:

 ALTER TABLE your_table ALTER COLUMN Telephone BIGINT; ALTER TABLE your_table ALTER COLUMN Telephone VARCHAR(15); 

之后,你可以像这样改变你的数据

 UPDATE your_table SET Telephone = '07' + substring(Telephone, 4,99) WHERE charindex('447', Telephone) = 1 

SQLFiddle演示

也许改变来源(并在将来避免转换要求?):

 =IF(LEFT(A1,2)="44",0&MID(A1,3,15),LEFT(A1,15)) 

这会导致一个string。

以下应该工作。 我也给了一个例子…你只需要使用UPDATE语句…

 DECLARE @Telephone TABLE(Telephone VARCHAR(100)) INSERT INTO @Telephone SELECT '44712345' UNION ALL SELECT '123447' UNION ALL SELECT '447123447' SELECT * FROM @Telephone UPDATE @Telephone SET Telephone = STUFF(Telephone, 1, 3, '07') WHERE (charindex('447', Telephone) = 1) SELECT * FROM @Telephone 

1)电话号码通常使用VARCHAR列进行存储。

2)假设旧的 Telephone列是一个FLOAT列,如果你的Telehone列(现在是一个VARCHAR(15)列)具有类似'4.47944e+011'那么你需要将这些值转换回FLOAT,然后你必须使用STR将FLOAT值转换为VARCHAR。 例如,下面的脚本

 DECLARE @PhoneFromFloat VARCHAR(15) = '4.47944e+011' SELECT STR(CONVERT(FLOAT, @PhoneFromFloat), 15, 0) 

输出: 447944000000

要执行这个更新,你可以使用这个脚本:

 BEGIN TRANSACTION; UPDATE dbo.Stack SET Telephone = STR(CONVERT(FLOAT, Telephone), 15, 0) OUTPUT deleted.Telephone, inserted.Telephone -- This clause will show affected phone numbers WHERE Telephone LIKE '%e%'; ROLLBACK; -- COMMIT 

注意:如果直接将电话号码导入到VARCHAR列而不是FLOAT列,则可以避免这些问题。

3)然后你可以使用:

 BEGIN TRANSACTION; UPDATE dbo.Stack SET Telephone = STUFF(Telephone, 1, 2, '0') WHERE Telephone LIKE '447%'; ROLLBACK; -- COMMIT 

注意:您可以使用Excel函数replaceExcel中的函数。