2013-05-29 90 views
0

我正在使用SQL Server 2008.我試圖根據列B中的手機號碼獲取列A中的值。移動號碼可以採用不同的格式,如下所示:處理手機號碼 - SQL Server 2008

1. 44 752 111 1234 
2. 07521111234 
3. 07521111234 
4. 447521111234 
5. 7521111234 
6. 752 111 1234 etc...etc. 

我需要在列A中根據手機號碼提取數據的語法,但僅限於從75開始的10位數字作爲搜索條件。前綴(44,0)和兩者之間的空格必須忽略。

另請注意,在10位數字中,我指的是以所有組合開頭的數字,我認爲只有7個數字保持不變。即它可以是077或075或078或75或78等等。

你能幫忙嗎?謝謝。

回答

1

您可以使用CHARINDEX來幫助您解決問題,

SELECT ColA, 
     SUBSTRING(ColA, CHARINDEX('75', ColA), LEN(ColA) - CHARINDEX('75', ColA) + 1) 
FROM TableName 

OR

SELECT ColA, 
     RIGHT(ColA, LEN(ColA) - CHARINDEX('75', ColA) + 1) ColB 
FROM TableName 

同時輸出查詢,

╔═════════════════╦══════════════╗ 
║  COLA  ║  COLB  ║ 
╠═════════════════╬══════════════╣ 
║ 44 752 111 1234 ║ 752 111 1234 ║ 
║ 07521111234  ║ 7521111234 ║ 
║ 07521111234  ║ 7521111234 ║ 
║ 447521111234 ║ 7521111234 ║ 
║ 7521111234  ║ 7521111234 ║ 
║ 752 111 1234 ║ 752 111 1234 ║ 
╚═════════════════╩══════════════╝ 
+0

JW您好,感謝您的回覆。這在一定程度上有所幫助。如果我所指的10位數字以不同的組合開始並且僅剩7個常數。即它可以是077或075或078或75或78或73或79等等。 – user2432565

0
DECLARE @Tels AS TABLE (no varchar(20)) 

INSERT INTO @Tels 
VALUES 
('44 752 111 1234'), 
('07521111234'), 
('07521111234'), 
('447521111234'), 
('7521111234'), 
('752 111 1234') 

SELECT SUBSTRING(REPLACE(no, ' ', ''), 3, 10) from @Tels where no like '75%' 

關於你的第二個問題...

SELECT SUBSTRING(REPLACE(no, ' ', ''), 3, 10) from @Tels where no like '7[0-9]%' 
UNION 
SELECT SUBSTRING(REPLACE(no, ' ', ''), 4, 10) from @Tels where no like '07[0-9]%' 
+0

嗨Yaugen,謝謝你的回覆。這在一定程度上有所幫助。如果我所指的10位數字以不同的組合開始並且僅剩7個常數。即它可以是077或075或078或75或78或73或79等等。 – user2432565

+0

查看上面的代碼片段中的更新 –

0

如果你正在處理的固定長度沒有的(如英國手機號碼)我發現最好的方法是:

RIGHT(REPLACE([MyColumn],' ',''),10) 

SQL Fiddle