SQL:比如where条件指定一个字母后面跟一个数字,后面跟其他任何东西?
是否可以在MS SQL Server中写入WHERE条件,以获取以下行:SQL:比如where条件指定一个字母后面跟一个数字,后面跟其他任何东西?,sql,sql-server,tsql,Sql,Sql Server,Tsql,是否可以在MS SQL Server中写入WHERE条件,以获取以下行: 以指定的字母开头 那么我有一个小数点 还有别的吗 我基本上有一个包含邮政编码的表格,我想要所有属于伯明翰的邮政编码-B后跟一个数字。有些邮政编码以B开头,然后是另一个不属于伯明翰的字母,所以我不能简单地使用比如“B%” 谢谢 像'B[0-9]'一样使用。“[0-9]”表示“0”-“9”范围内的任何字符 还请记住:(a)在某些情况下,有人会输入“O”而不是“0”,并且可能有一些国际邮政编码也以B和数字开头,因此如果您有可
- 以指定的字母开头
- 那么我有一个小数点
- 还有别的吗
比如“B%”
谢谢 像'B[0-9]'一样使用。“[0-9]”表示“0”-“9”范围内的任何字符
还请记住:(a)在某些情况下,有人会输入“O”而不是“0”,并且可能有一些国际邮政编码也以B和数字开头,因此如果您有可靠的国家/地区字段,您也应该检查:)是的,我经常使用邮政编码:)我认为您可以这样做:
Select * From PostCodes
Where PostCode 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]%'
MySQL内置了正则表达式(REGEXP/RLIKE)。我认为您可以将该功能添加到其他功能中,例如SQL Server 这将使您更精确,例如
SELECT * FROM PostCodes WHERE PostCode RLIKE '^B[[:digit:]]{1,2}[:space:]'
这也将允许更好地匹配条件中可能的打字错误。根据维基百科关于:
- B39无效
- B95是雅顿的亨利,
埃文河畔斯特拉特福德——你愿意吗
把雅顿的Henley看作“属于”BR> 去伯明翰“?(也许是的,我 (真的不知道)
postcode LIKE 'B1 %'
OR postcode LIKE 'B2 %'
OR postcode LIKE 'B3 %'
...
OR postcode LIKE 'B10 %'
OR postcode LIKE 'B11 %'
OR postcode LIKE 'B12 %'
...
这些前缀当然可以存储在一个表中。它将匹配a B,后跟任意一组字符,后跟一个数字,后跟任意一组字符,因此我认为它将匹配,例如,“BS1 6DF”,布里斯托尔邮政编码,还有伯明翰的邮政编码。@Matt-我一发布就注意到里面有一个流氓%,所以我马上修改了我的答案。CheersBirmingham和大多数地区一样,没有“0”区,因此“B[1-9]%”更准确(如果有点迂腐)@迈克说得对!虽然我注意到在我手头的数据库中,据称伯明翰有四个“B0…”地址,我猜用户打算在那里键入“B1…”,因此可能需要根据需要包括哪些特定错误来调整自己的迂腐程度:)使用军械调查局开放的代码点文件中的数据,您可以验证邮政编码是否确实存在,而不是对格式进行简单的验证。事实上,OpenCodePoint是一个可爱的、相对较新发布的资源,因此它绝对值得一提。然后,您可以相当容易地对所有(有效)邮政编码进行地理编码,并使用Haversine进行类似“伯明翰市中心十英里范围内”的查询。但数据越奇怪,情况就越复杂,比如有一半的邮政编码,或者有海峡群岛的东西(我相信这些东西是邮政编码的,但我上次查看时没有在开放代码点中进行地理编码。)-1 SQL不是这样工作的。LIKE谓词似乎包含两个通配符。
SELECT
子句中的firstletter
列关联名称不能用于WHERE
子句。
postcode LIKE 'B1 %'
OR postcode LIKE 'B2 %'
OR postcode LIKE 'B3 %'
...
OR postcode LIKE 'B10 %'
OR postcode LIKE 'B11 %'
OR postcode LIKE 'B12 %'
...