Sql 返回只有一个数字字符的邮政编码(varchars)
我被要求运行一个查询,从一个充满电子邮件报告过滤器的表格中返回英国邮政编码列表,该表格的末尾只有一个数字。问题是英国邮政编码长度可变;有些结构为“AA”或“AA”,有些结构为“A”或“A”。我只想要那些“AA”或“A”的 我试着运行下面的SQL,使用length并尝试使用regex过滤掉所有与我想要的不匹配的结果,但是我对使用ranges非常陌生,它没有起作用Sql 返回只有一个数字字符的邮政编码(varchars),sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我被要求运行一个查询,从一个充满电子邮件报告过滤器的表格中返回英国邮政编码列表,该表格的末尾只有一个数字。问题是英国邮政编码长度可变;有些结构为“AA”或“AA”,有些结构为“A”或“A”。我只想要那些“AA”或“A”的 我试着运行下面的SQL,使用length并尝试使用regex过滤掉所有与我想要的不匹配的结果,但是我对使用ranges非常陌生,它没有起作用 SELECT PostCode FROM ReportFilterTable RFT WHERE RFT.FilterType = 'P
SELECT PostCode
FROM ReportFilterTable RFT
WHERE RFT.FilterType = 'Postcode'
AND LEN(RFT.Postcode) < 4
AND RFT.PostCode LIKE '%[0-9]'
我认为我处理这件事的方式是有缺陷的,但我不知道有没有更好的方式。有人能帮我吗
谢谢
编辑:
因为我最初没有包含任何示例数据,所以我现在在下面这样做了
这是我要返回的列中的值的一个示例,包括我需要返回什么和不需要返回什么的示例
B1-应返回
B10-不应返回
B2-应返回
B20-不应返回
B3-应该返回
B30-不应返回
SE1-应该返回
SE10-不应返回
如果问题是您正在获取多个数字的值,并且按照语法建议使用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]'
如果问题是您正在获取多个数字的值,并且按照语法建议使用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位。。。类似“[^0-9][0-9]”非数字后跟1位。。。与“[^0-9][0-9]”类似,您可以筛选一个或两个字母,并忽略长度检查,因为它隐含在类似内容中:
WHERE RFT.FilterType = 'Postcode' AND
(RFT.PostCode LIKE '[A-Z][0-9]' OR RFT.PostCode LIKE '[A-Z][A-Z][0-9]')
您可以筛选一个或两个字母,并忽略长度检查,因为它隐含在以下类似内容中:
WHERE RFT.FilterType = 'Postcode' AND
(RFT.PostCode LIKE '[A-Z][0-9]' OR RFT.PostCode LIKE '[A-Z][A-Z][0-9]')
您正在使用哪个版本的SQL?请用您正在使用的数据库标记您的问题。此外,样本数据和期望的结果将有助于解释您想要做什么。您是指一个数字还是一个数字?啊,抱歉,这是我的第一个问题!我现在将更新标记和数据。您使用的SQL版本是什么?请使用您正在使用的数据库标记您的问题。此外,样本数据和期望的结果将有助于解释您想要做什么。您是指一个数字还是一个数字?啊,抱歉,这是我的第一个问题!我现在将更新标记和数据。问题是它不一定是一个非数字字符后跟一个数字字符。这实际上是+非数字+数字。所以它与AA1和A1匹配。还有1A1。问题是它不一定是一个非数字字符后跟一个数字字符。这实际上是一个+非数字+数字的东西。所以它与AA1和A1匹配。还有1A1,就是这样。返回的结果都是“AA”或“A”格式。非常感谢!这就成功了。返回的结果都是“AA”或“A”格式。非常感谢!