从 SQL 中的 table 中提取特定的 post 代码
Pull back specific post codes from table in SQL
我在 selecting 特定 post 代码时遇到问题。
这些都是有效的英国 post 代码格式:
- WV11JX
- WV1 1JX
- WV102QK
- WV10 2QK
- WV113KQ
- WV11 3KQ
现在,假设我在数据中混合了上述格式 table;我正在尝试 select 仅 post 符合 WV1 前缀的代码(在此示例中)。
在上面的 6 项列表中,我想 return:
- 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)
以上将过滤掉带有 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]'
我不确定最后三个字符是否允许使用数字。
我在 selecting 特定 post 代码时遇到问题。
这些都是有效的英国 post 代码格式:
- WV11JX
- WV1 1JX
- WV102QK
- WV10 2QK
- WV113KQ
- WV11 3KQ
现在,假设我在数据中混合了上述格式 table;我正在尝试 select 仅 post 符合 WV1 前缀的代码(在此示例中)。
在上面的 6 项列表中,我想 return:
- 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)
以上将过滤掉带有 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]'
我不确定最后三个字符是否允许使用数字。