从 SQL 中的 table 中提取特定的 post 代码

Pull back specific post codes from table in SQL

我在 selecting 特定 post 代码时遇到问题。

这些都是有效的英国 post 代码格式:

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

现在,假设我在数据中混合了上述格式 table;我正在尝试 select 仅 post 符合 WV1 前缀的代码(在此示例中)。

在上面的 6 项列表中,我想 return:

我想排除:

如果我执行以下查询,这将带回 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)

以上将过滤掉带有 space 的任何格式,因此如果我们通过执行以下操作来满足这些格式:

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' 比较列表是不可行的。

我们如何以可扩展的方式隔离上述 post 代码? 我正在使用 Microsoft SQL Server 2016。

我觉得你想要的逻辑是:

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

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