2010-06-25 93 views
2

是否有可能寫在MS SQL Server中的WHERE條件,將搶行是:SQL:LIKE在哪裏條件指定一個字母后跟一個數字後面跟着其他什麼?

  • 開始與指定的信
  • 然後有一個小數
  • 然後別的

我基本上有一個包含郵政編碼的表格,我希望所有屬於伯明翰的郵政編碼都是B,後面跟着一個數字。一些郵政編碼在那裏開始B,然後是另一封不屬於伯明翰的信件,所以我不能簡單地使用LIKE 'B%'

謝謝!

回答

8

使用LIKE'B [0-9]%'。 「[0-9]」表示範圍'0' - '9'中的任何字符。請注意,(a)在某些情況下,某人將輸入「O」而不是「0」,並且可能有一些國際郵編也以B和一個數字開頭,因此如果你已經有了一個可靠的國別場,你應該檢查,太:)是的,我郵政編碼工作了很多:)

+1

與大多數地區一樣,伯明翰沒有'0'地區,所以'B [1-9]%'會更準確(如果是小事迂腐)。 http://en.wikipedia.org/wiki/Postcodes_in_the_United_Kingdom – 2010-06-25 09:15:57

+0

@Mike公平點!雖然我注意到我必須在數據庫中註冊,但據稱在伯明翰有四個「B0 ...」地址,我猜想用戶打算輸入「B1 ...」,所以可能需要根據數據庫調整個人的學習程度需要包括哪些特定錯誤:) – 2010-06-25 09:27:57

+2

使用Ordnance Survey的Open Codepoint文件中的數據,您可以驗證郵編是否實際存在,而不是簡單驗證格式 – 2010-06-25 13:00:42

0

我認爲你可以做這樣的事情:

Select * From PostCodes 
Where PostCode Like 'B[0-9]%' 
+0

這將匹配一個B,後面跟着任何一串字符,後跟一個數字,後面跟着任何一串字符,所以我認爲它會匹配,例如,「BS1 6DF」,布裏斯托爾郵政編碼以及伯明翰郵政編碼。 – 2010-06-25 08:46:03

+0

@Matt - 一旦我發佈,我注意到有一個流氓%,所以我馬上修改了我的答案。歡呼 – codingbadger 2010-06-25 08:58:54

-1
SELECT postc FROM postcodes WHERE postc LIKE 'B[0-9]*%'; 

沿着這些線路的東西!

你也可以這樣做:

SELECT 
    postc as ps,UPPER(SUBSTR(ps),1,1) as firstLetter,SUBSTR(ps,2,1) as secondNumber 
FROM 
    postcodes 
WHERE 
    firstLetter = 'B' AND secondNumber LIKE '[0-9]%' 

他們沿着東西線。

+0

-1 SQL不能像那樣工作。您的LIKE謂詞似乎包含兩個通配符。 'SELECT'子句中的'firstletter'列相關名稱不能用在'WHERE'子句中。 – onedaywhen 2010-06-25 09:48:09

0

MySQL內置了正則表達式(REGEXP/RLIKE)。我認爲您可以將其他功能添加到其他人,如SQL Server。

這會給你更多的精度,例如

SELECT * FROM PostCodes WHERE PostCode RLIKE '^B[[:digit:]]{1,2}[:space:]' 

這也可以更好地匹配條件中可能的拼寫錯誤。

2

據有關B postcode area維基百科的文章:

  • B39是無效
  • B95是亨利在-雅頓,
    Stratford在雅芳 - 你會
    認爲亨利在 - 阿爾丁「屬於
    伯明翰」? (也許是,我 真的不知道)

也許最安全,擴大了您認爲伯明翰代碼:

postcode LIKE 'B1 %' 
OR postcode LIKE 'B2 %' 
OR postcode LIKE 'B3 %' 
... 
OR postcode LIKE 'B10 %' 
OR postcode LIKE 'B11 %' 
OR postcode LIKE 'B12 %' 
... 

那些前綴當然可以存儲在表中。

相關問題