2012-01-19 57 views
0

我需要寫在T-SQL表值函數,將採取一個郵政編碼在任何字符串格式和輸出前五位數兩個整數和第二四位數部分郵政編碼。SQL服務器:郵編分析器

輸入可以是這樣的:「123456787432」,在這種情況下,只有前9位應考慮在內。

或者,它可以是這樣的:「12345-4567」,或這樣的:「12345」,在這種情況下,第二部分輸出應爲0

或者,它可以具有與數字當中的任何垃圾字符,哪些字符應該被忽略。 如果第二部分是「0345」,則輸出應該是345.

如果有一種有效的方法來過濾所有非數字字符,其餘部分將非常容易。

我會明白任何建議。

+0

爲什麼選擇TVF?您可以使用具有CASE語句的視圖更高效地實現此邏輯。 – Yuck

+0

因爲我需要分開郵編2部分。 –

回答

0

如果有過濾掉所有的非數字字符 一種有效的方式,其餘的將很容易

不知道有效率的,但是這是一種方式。

declare @s varchar(10) 

set @s = 'ab123c d45' 

while patindex('%[^0-9]%', @s) > 0 
set @s = stuff(@s, patindex('%[^0-9]%', @s), 1, '') 

select @s 
+0

非常感謝!太棒了! –

0

我不知道兩兩件事: 1)如果什麼郵政編碼具有前導零或兩個(有的做)?你不想剝去這些。 2)你提到,如果第二部分有一個前導零,你想刪除它。郵編+4(又名九位郵政編碼)在第二部分需要4位數字。