2012-01-19 29 views
0

T-SQLで任意の文字列形式の郵便番号を取得し、最初の5桁と2番目の4桁の部分に2つの整数を出力するテーブル値関数を記述する必要があります。郵便番号。SQL Server:郵便番号パーサ

入力は次のようになります。「123456787432」この場合、最初の9桁のみを考慮する必要があります。

それとも、それは次のようになります。第二部の出力が0

するか、それは数字の間で任意の文字化けを有していてもよく、その場合には、「12345」:「12345から4567」、またはこのようなどの文字を無視すべきですか? 2番目の部分が "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つ(一部)が行うがある場合は?あなたはそれらを取り除きたくありません。 2)2番目の部分に先行ゼロがある場合は、それを削除したいと述べました。 ZIP + 4(別名9桁の郵便番号)は、2番目の部分で4桁を必要とします。