从SQL的表格中提取特定的邮政编码

在选择特定的邮政编码时遇到问题。

这些都是有效的英国邮政编码格式:

  1. WV11JX
  2. WV1 1JX
  3. WV102QK
  4. WV10 2QK
  5. WV113KQ
  6. WV11 3KQ

现在,假设我在数据表中混合了上述格式;我试图仅选择符合WV1前缀的邮政编码(在此示例中)。

在上面的6个项目列表中,我想返回:

  • WV11JX
  • WV1 1JX

我想排除:

  • WV102QK
  • WV10 2QK
  • WV113KQ
  • WV11 3KQ

如果我执行以下查询,这将同时带回WV11WV1

SELECT ad.PostCode,*
FROM Staff st
INNER JOIN Address ad on ad.AddressID = st.Address
WHERE
ad.PostCode like 'WV1%'

更改WHERE中的条件以适应这样的长度实际上也不起作用:

SELECT ad.PostCode,*
FROM Staff st
INNER JOIN Address ad on ad.AddressID = st.Address
WHERE
(
ad.PostCode like 'WV1%'
OR
(ad.PostCode like 'WV1%' and LEN(ad.PostCode) = 6)

上面的代码只会用空格过滤掉任何格式,因此,如果我们通过以下操作来满足这些要求,那么

SELECT ad.PostCode,*
FROM Staff st
INNER JOIN Address ad on ad.AddressID = st.Address
WHERE
(ad.PostCode like 'WV1%' and LEN(ad.PostCode) = 6)
or
(ad.PostCode like 'WV1 %' and LEN(ad.PostCode) = 7)

这解决了问题,但问题在于我们不希望以这种方式检查“ WV1”前缀,因此增加“ OR”比较列表是不可行的。

我们如何以可扩展的方式隔离上述邮政编码? 我正在使用microsoft SQL Server 2016。

xiashiwei1 回答:从SQL的表格中提取特定的邮政编码

我认为您想要的逻辑是:

WHERE ad.PostCode like 'WV1 [0-9][A-Z][A-Z]' OR
      ad.PostCode like 'WV1[0-9][A-Z][A-Z]' 

我不确定最后三个字符是否允许数字。

本文链接:https://www.f2er.com/2698877.html

大家都在问