在最后三个字符前插入空格

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

我有一张英国邮政编码表。所有这些都是不同的格式,有些是大写的,而有些则不是。我想要做的就是格式化它们,以便它们可以遵循英国邮政编码标准。例如AB1 2BB

我使用此查询的目的确实有效,但是一些邮政编码的第一部分更长或更短,所以它并不能成功。

SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , 4, 0, ' ')) AS postcode

但是,如果我尝试反过来这样做

SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , -4, 0, ' ')) AS postcode

它不起作用并返回粘在一起的所有邮政编码,例如AB12BB

我想要的是在最后3个字符前加一个空格。

mysql sql mysqli phpmyadmin
3个回答
1
投票

我想你想要:

select concat_ws(' ',
                 left(replace(postcode, ' ', ''), 3),
                 right(replace(postcode, ' ', ''), 3
                ) as standardized_postcode

0
投票

删除所有空格后,在字符串末尾的第3个字符处插入一个空格:

SELECT UPPER(INSERT(REPLACE(postcode , ' ', ''), LENGTH(REPLACE(postcode , ' ', '')) - 2, 0, ' ')) AS postcode

0
投票

听起来你将要处理这样的邮政编码:

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));
© www.soinside.com 2019 - 2024. All rights reserved.