我有一张英国邮政编码表。所有这些都是不同的格式,有些是大写的,而有些则不是。我想要做的就是格式化它们,以便它们可以遵循英国邮政编码标准。例如AB1 2BB
。
我使用此查询的目的确实有效,但是一些邮政编码的第一部分更长或更短,所以它并不能成功。
SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , 4, 0, ' ')) AS postcode
但是,如果我尝试反过来这样做
SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , -4, 0, ' ')) AS postcode
它不起作用并返回粘在一起的所有邮政编码,例如AB12BB
我想要的是在最后3个字符前加一个空格。
我想你想要:
select concat_ws(' ',
left(replace(postcode, ' ', ''), 3),
right(replace(postcode, ' ', ''), 3
) as standardized_postcode
删除所有空格后,在字符串末尾的第3个字符处插入一个空格:
SELECT UPPER(INSERT(REPLACE(postcode , ' ', ''), LENGTH(REPLACE(postcode , ' ', '')) - 2, 0, ' ')) AS postcode
听起来你将要处理这样的邮政编码:
LS10 1DH
LS101DH
LS63DR
我们应该从删除所有空格开始:
REPLACE(postcode,' ','') -- LS10 1DH becomes LS101DH
取最后3个字符:
RIGHT(REPLACE(postcode,' ',''), 3) -- 1DH
以及从最后到第3个的所有角色:
LEFT(REPLACE(postcode,' ',''), LEN(REPLACE(postcode,' ','')) - 3))
然后使用CONCAT将它们组合在一起:
SET @postcode = 'LS101DH';
SELECT CONCAT(LEFT(REPLACE(@postcode,' ',''), LENGTH(REPLACE(@postcode,' ','')) - 3),
' ', -- add a space in
RIGHT(REPLACE(@postcode,' ',''), 3));