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 返回只有一个数字字符的邮政编码(varchars)_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

Sql 返回只有一个数字字符的邮政编码(varchars)

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

我被要求运行一个查询,从一个充满电子邮件报告过滤器的表格中返回英国邮政编码列表,该表格的末尾只有一个数字。问题是英国邮政编码长度可变;有些结构为“AA”或“AA”,有些结构为“A”或“A”。我只想要那些“AA”或“A”的

我试着运行下面的SQL,使用length并尝试使用regex过滤掉所有与我想要的不匹配的结果,但是我对使用ranges非常陌生,它没有起作用

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”格式。非常感谢!