所有手机号码都采用447XXXXXXXX格式,我希望这些号码的格式为07XXXXXXXXXX。
我打算尝试以下查询:
UPDATE stack
SET Telephone= REPLACE(Telephone,'447','07')
但是,如果一个数字包含447,这也将被替换,我打算使用通配符来替换每列的前两个4。如何更新所有49,000个条目的最佳方法,我已经创建了一个备份以防万一。
的更新 的
似乎数字设置的格式错误,因此使用以下查询将它们设置为正确的格式:
ALTER TABLE stack ALTER COLUMN Telephone VARCHAR(15)
现在所有数字都以奇怪的格式显示:4.47944e + 011
答案 0 :(得分:3)
将数据类型更改为varchar
(数字数据类型不存储前导零)。为此,您需要先将其更改为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
答案 1 :(得分:1)
可能更改源(并避免将来转换要求?):
=IF(LEFT(A1,2)="44",0&MID(A1,3,15),LEFT(A1,15))
这会产生一个字符串。
答案 2 :(得分:0)
以下应该工作。我也举了一个例子......你只需要使用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
答案 3 :(得分:0)
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函数在Excel中执行此替换。