我被要求运行一个查询,从一个表格中返回英国邮政编码列表,这些表格中包含电子邮件报告的过滤器,最后只有1个号码。问题是英国的邮政编码长度可变;有些是'AA#'或'AA ##'结构,有些是'A#'或'A ##'。我只想要那些'AA#'或'A#'。
我尝试运行下面的SQL,使用长度和(尝试)使用正则表达式来过滤掉所有与我想要的不匹配的结果,但我对使用范围非常新,但它没有用。< / p>
SELECT PostCode
FROM ReportFilterTable RFT
WHERE RFT.FilterType = 'Postcode'
AND LEN(RFT.Postcode) < 4
AND RFT.PostCode LIKE '%[0-9]'
我认为我接近这个的方式是有缺陷的,但我对一个更好的方法毫无头绪。谁能帮助我?
谢谢!
编辑:
由于我原本没有包含任何示例数据,我现在已经在下面这样做了。
这是我正在返回的列中的一种值的示例,其中包含我需要返回的内容以及我不返回的内容的示例。
答案 0 :(得分:1)
如果问题是您获得了多个数字和的值,那么您正在使用SQL Server(根据语法建议),那么您可以这样做:
WHERE RFT.FilterType = 'Postcode' AND
LEN(RFT.Postcode) < 4 AND
(RFT.PostCode LIKE '%[0-9]' AND RFT.PostCode NOT LIKE '%[0-9][0-9]')
或者,如果你知道至少有两个字符,你可以使用:
WHERE RFT.FilterType = 'Postcode' AND
LEN(RFT.Postcode) < 4 AND
RFT.PostCode LIKE '%[^0-9][0-9]'
答案 1 :(得分:1)
您可以过滤一两个字母(并省略长度检查,因为它隐含在LIKE中):
WHERE RFT.FilterType = 'Postcode' AND
(RFT.PostCode LIKE '[A-Z][0-9]' OR RFT.PostCode LIKE '[A-Z][A-Z][0-9]')
答案 2 :(得分:0)
非数字后跟1位... LIKE '%[^0-9][0-9]'