2010-06-25 85 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 %' 
... 

那些前缀当然可以存储在表中。

相关问题