SQL सर्वर 2008 में यूके एड्रेस पोस्टकोड की सफाई
साफ़ करने के लिए SQL सर्वर फ़ंक्शन बनाएं, सामान्य गलतियों को बदलें और यूके पोस्टकोड को सही स्थान स्थिति के साथ पुन: प्रारूपित करें
संदर्भ
यह लेख काफी लोकप्रिय रहा है, इसलिए मैंने इसे कुछ और जानकारी के साथ अद्यतन किया है और स्वरूपण को साफ कर दिया है, क्योंकि कुछ रिक्त स्थान छूट गए थे, इसलिए इसे सीधे SSMS में कॉपी किया जा सकता है।
यह निम्नलिखित चरणों का उपयोग करता है;
यह निम्नलिखित चरणों का उपयोग करता है;
- संख्याओं और अक्षरों के अलावा टेक्स्ट स्ट्रिंग (रिक्त स्थान सहित) से सब कुछ हटा दें
- मानक टाइपिंग गलतियों को प्रतिस्थापित करता है जैसे;
- पोर्ट्समाउथ पीओ है, कोलचेस्टर सीओ है, लेकिन कभी-कभी इसे P0 या C0 (एक शून्य) के रूप में दर्ज किया जाता है
- Ilford और Reading IG और RG हैं, लेकिन कभी-कभी G . के स्थान पर 6 के साथ प्रवेश किया जाता है
- पोस्टकोड के प्रारूप में वर्क आउट करें और एक जगह डालें जहां यह होना चाहिए।
- जांचें कि प्रारूप सही है और यदि सही है तो एक नया मान लौटाएं, अन्यथा पुराने प्रारूप को वापस कर दें।
कृपया ध्यान दें, यह जांच नहीं करता है कि पोस्ट कोड वास्तव में मौजूद है या नहीं, और आगे पढ़ने को यूनाइटेड किंगडम में निम्नलिखित लिंक पोस्टकोड पर पाया जा सकता है।
SQL
CREATE FUNCTION CleansePostCode (@PostCode VARCHAR(100)) RETURNS VARCHAR(100) AS BEGINDECLARE @OldPostCode VARCHAR(100)SET @OldPostCode=LTRIM(RTRIM(@PostCode))
--Clean to Numbers and LettersDECLARE @Letter INTSET @Letter = PATINDEX('%[^0-Z]%',@PostCode)BEGINWHILE @Letter>0BEGINSET @PostCode = STUFF(@PostCode,@Letter,1,'')SET @Letter = PATINDEX('%[^0-Z]%',@PostCode)ENDEND
--Replace obvious errorsSET @PostCode =(CASE WHEN LEFT(@PostCode,2)='P0' THEN STUFF(@PostCode,1,2,'PO')WHEN LEFT(@PostCode,2)='C0' THEN STUFF(@PostCode,1,2,'CO')WHEN LEFT(@PostCode,2)='I6' THEN STUFF(@PostCode,1,2,'IG')WHEN LEFT(@PostCode,2)='HO' THEN STUFF(@PostCode,1,2,'HD')WHEN LEFT(@PostCode,2)='C8' THEN STUFF(@PostCode,1,2,'CB')WHEN LEFT(@PostCode,2)='D0' THEN STUFF(@PostCode,1,2,'DO')WHEN LEFT(@PostCode,2)='H5' THEN STUFF(@PostCode,1,2,'HS')WHEN LEFT(@PostCode,2)='0L' THEN STUFF(@PostCode,1,2,'OL')WHEN LEFT(@PostCode,2)='0X ' THEN STUFF(@PostCode,1,2,'OX')WHEN LEFT(@PostCode,2)='P0' THEN STUFF(@PostCode,1,2,'PO')WHEN LEFT(@PostCode,2)='R6' THEN STUFF(@PostCode,1,2,'RG')ELSE @PostCode END)
--Works out correct pattern and insert spaceSET @PostCode = (CASE WHEN @PostCode LIKE '[A-Z][A-Z][0-9][0-9][A-Z][A-Z]' THEN LEFT(@PostCode,3)+' '+RIGHT(@PostCode,3)WHEN @PostCode LIKE '[A-Z][0-9][0-9][A-Z][A-Z]' THEN LEFT(@PostCode,2)+' '+RIGHT(@PostCode,3)WHEN @PostCode LIKE '[A-Z][0-9][0-9][0-9][A-Z][A-Z]' THEN LEFT(@PostCode,3)+' '+RIGHT(@PostCode,3)WHEN @PostCode LIKE '[A-Z][0-9][A-Z][0-9][A-Z][A-Z]' THEN LEFT(@PostCode,3)+' '+RIGHT(@PostCode,3)WHEN @PostCode LIKE '[A-Z][A-Z][0-9][0-9][0-9][A-Z][A-Z]' THEN LEFT(@PostCode,4)+' '+RIGHT(@PostCode,3)WHEN @PostCode LIKE '[A-Z][A-Z][0-9][A-Z][0-9][A-Z][A-Z]' THEN LEFT(@PostCode,4)+' '+RIGHT(@PostCode,3)ELSE @PostCode END)
--Update @NewPostCode to old value if pattern does not match, or else use new value.DECLARE @NewPostCode VARCHAR(100)IF (CASE WHEN @PostCode LIKE '[A-Z][A-Z][0-9] [0-9][A-Z][A-Z]' THEN 1WHEN @PostCode LIKE '[A-Z][0-9] [0-9][A-Z][A-Z]' THEN 2WHEN @PostCode LIKE '[A-Z][0-9][0-9] [0-9][A-Z][A-Z]' THEN 3WHEN @PostCode LIKE '[A-Z][0-9][A-Z] [0-9][A-Z][A-Z]'THEN 4WHEN @PostCode LIKE '[A-Z][A-Z][0-9][0-9] [0-9][A-Z][A-Z]' THEN 5WHEN @PostCode LIKE '[A-Z][A-Z][0-9][A-Z] [0-9][A-Z][A-Z]' THEN 6ELSE 0 END)=0BEGIN SET @NewPostCode=@OldPostCodeENDELSESET @NewPostCode=@PostCodeRETURN @NewPostCodeEND