Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:比如where条件指定一个字母后面跟一个数字,后面跟其他任何东西?_Sql_Sql Server_Tsql - Fatal编程技术网

SQL:比如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和数字开头,因此如果您有可

是否可以在MS SQL Server中写入WHERE条件,以获取以下行:

  • 以指定的字母开头
  • 那么我有一个小数点
  • 还有别的吗
我基本上有一个包含邮政编码的表格,我想要所有属于伯明翰的邮政编码-B后跟一个数字。有些邮政编码以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 %'
...