2013-11-21 134 views
0

我正在SQL Server 2008 R2中爲類創建示例數據庫,並用虛擬數據填充它,我可以創建存儲過程等。更改所有電話號碼SQL

我想要創建的sprocs之一是將所有電話號碼(所有美國10位數字格式)更改爲(XXX)XXX-XXXX。

我特意輸入了一組不同格式的電話號碼,並希望將它們全部格式化爲上面列出的標準格式,所以無論數字輸入到數據庫中的格式如何,它們都會被正確格式化。

我甚至不知道如何開始這個。我真的還不熟悉SQL。另外...我正在拉數據庫中的所有電話號碼,而不是從一個表中取出。

CREATE PROC spPhoneNumberFormat 
AS 

Select Employees.Phone, Vendors.Phone, Vendors.AltPhone 
From Employees join Vendors on employees.ID = vendors.ID 

希望大家都能幫忙?

+0

您用於「PhoneNumber」列的數據類型是什麼? – MusicLovingIndianGirl

+0

varchar(20)我以爲我把它留在10.我將不得不編輯它。 –

+0

是的,將其更改爲'varchar(20)'或更多,然後嘗試。 – MusicLovingIndianGirl

回答

0
0

因爲我不知道哪種格式美國的電話號碼出現在,我只能爲你提供關於如何解析和處理基本指令字符串。

您可以使用REPLACE(1,2,3)將字段解析爲其基本形式XXXXXXXXXX。 在替換中,1是您正在處理的完整字符串,2是您要替換的部分,3是您將替換的部分。因此,您可以使用REPLACE(PHONENUM,'+','')刪除加號。您可以組合REPLACE函數,甚至可以在某種程度上使用REGEX來同時解析多個不同的字符,字符串等。 Google會向您提供如何操作的說明。

如果電話號碼格式爲XXXXXXXXXX,則可以使用子字符串等函數重新格式化電話號碼。 IE:

SELECT '('+SUBSTRING(PHONENUM,1,3)+')'+SUBSTRING(PHONENUM,4,6)+'-'+SUBSTRING(PHONENUM,7,LEN(PHONENUM)) 

這會將XXXXXXXXXX更改爲(XXX)XXX-XXXX。

嘗試和測試這些,你應該立即得到它的工作。 :)

0

在SQL Server 2008的版本中,我有(r2)看起來substring函數的參數實際上是(stringname, start location, length)。因此,適當的查詢,以改變「XXXXXXXXXX」到「(XXX)XXX-XXXX」是:

update [TableName] 

set [phone] = '('+substring([phone],1,3)+')'+substring([phone],4,3)+'-'+substring([phone],7,4) 

where len([phone]) = 10 

限定符(where len([phone]) = 10)將阻止任何改變記錄超過十個字符 - 確保您的電話號碼也不會如果您不小心連續運行查詢兩次,則會受到污染。