2013-10-09 34 views
3

我有一個電話號碼格式爲888.345.ABCD(2223)的表格。在我的選擇中,我想返回888.345.2223。我可以這樣做以下:如何用SQL select語句中的另一個字符串值替換指定的字符串值?

select replace (phone_number, 'ABCD(2223)', '2223') 
from table1 

但我可以有不同的電話號碼,像888.345.EDED(3333)或888.345.EDED(3333)。我如何編寫查詢?

更新:但我可以有像888.123.4567電話號碼。

+0

您是否嘗試過使用通配符?用四個下劃線替換ABCD。我沒有測試環境來驗證,但它可能工作。 –

回答

1

如果字符串過於複雜,地點的變化,有不同數量的字符或其他有趣的行爲,那麼你應該依賴於正則表達式表達式......但請確保你需要它,因爲它可能會發生在this user,試圖警告別人使用正則表達式。

如果你認爲你可以使用它,看看如何創建一個良好的功能,使一些複雜的驗證TSQL Regular Expression Workbench

1

對於這兩種給定情況下:

declare @T table (phone_number varchar(50)) 
insert into @T values ('888.345.YYYY(2223)'),('888.345.XXXX (2223)') 

方法1: 使用LEFT()RIGHT()功能:

SELECT LEFT(phone_number,8) + LEFT(RIGHT(phone_number,5),4) 
FROM @T 

方法2: 使用STUFF()SUBSTRING()CHARINDEX()功能。

SELECT STUFF(phone_number,9,LEN(phone_number)-8, 
      SUBSTRING(phone_number, CHARINDEX('(',phone_number)+1,4)) 
From @T 

--Results 
888.345.2223 
888.345.2223 
0

你可以嘗試這樣的事情

select STUFF(LEFT(phone_number, LEN(phone_number)-1),8,6,'.') 
from table1 

內部LEFT移除最後一個)。然後STUFF用其他不需要的字符替換。

0

假設電話號碼的格式並沒有改變:

select replace (phone_number, RIGHT(phone_number, 10), SUBSTRING(phone_number, 14, 4)) 
from table1 
相關問題