MYSQL 有条件地过滤前 2 个字符

问题描述 投票:0回答:2

例如,我有一个 Outcodes 表(在英国,邮政编码的第一部分) id,outcode
1、AB1
2、AB2……等等
27、AL1
28、AL2……等等
52, B1
52、B2
52, B3
61, BA1
等等
我正在尝试获取外码的唯一第一部分的列表,所以
AB,
铝,
乙,
BA1
问题是在英国,邮政编码的第一部分可以是 1 或 2 个字母,所以 AB = Aberdeen,B = Birmingham 等,然后是数字。
该表由 id、outcode 和其他一些任意信息组成。 如果它的第一个字母然后是一个数字,我已经设法得到了这个代码的第一部分:-

SELECT DISTINCT(SUBSTRING(outcode,1,1)) as outcode
FROM outcodepostcodes
WHERE SUBSTRING(outcode, 2, 1) * 1 > 0

并将查询更改为

SELECT DISTINCT(SUBSTRING(outcode,1,2)) as outcode
FROM outcodepostcodes
WHERE SUBSTRING(outcode, 2, 1) * 1 = 0

我得到了所有的双字母,但我希望理想情况下是有一个查询来列出两个其他明智的我将不得不做2个查询并合并数组。
我很确定它在某处的if语句但是无法让它工作... 提前致谢 基思

mysql sql substring postal-code
2个回答
1
投票

CASE WHEN
子句可以解决问题:

select DISTINCT(case when SUBSTRING(outcode, 2, 1) * 1 > 0 then SUBSTRING(outcode,1,1)
                     else SUBSTRING(outcode,1,2) end) as outcode

from outcodepostcodes

0
投票

我这边的另一个回应。

with s1 as (select *,
replace(replace(replace(value,1,''),2,''),3,'') rp from series),
s2 as (select *,row_number() over (partition by rp) rn from s1)
select value from s2 where rn = 1

您可以根据您的数据集使用多个替换功能。

结果

© www.soinside.com 2019 - 2024. All rights reserved.