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

时间:2018-12-03 11:13:06

标签: mysql sql mysqli phpmyadmin

我有一张英国邮政编码表。它们全部采用不同的格式,有些用空格大写,有些则没有。我要做的是格式化它们,以便它们可以遵循英国邮政编码标准。例如AB1 2BB

我使用此查询的目的是可行的,但是某些邮政编码的第一部分较长或较短,因此并非所有人都能成功。

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

但是,如果我尝试用另一种方法来做

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

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

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

4 个答案:

答案 0 :(得分:1)

我想你想要

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

答案 1 :(得分: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));

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

for pc in postcodes:
    print('{} {}'.format(pc[:-3], pc[-3:]))

似乎可以为我使用给定的英国邮政编码列表。