在选择特定的邮政编码时遇到问题。
这些都是有效的英国邮政编码格式:
- WV11JX
- WV1 1JX
- WV102QK
- WV10 2QK
- WV113KQ
- WV11 3KQ
现在,假设我在数据表中混合了上述格式;我试图仅选择符合WV1前缀的邮政编码(在此示例中)。
在上面的6个项目列表中,我想返回:
- WV11JX
- WV1 1JX
我想排除:
- WV102QK
- WV10 2QK
- WV113KQ
- WV11 3KQ
如果我执行以下查询,这将同时带回WV11
和WV1
:
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。