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

Mysql 在最后三个字符前插入空格,mysql,sql,Mysql,Sql,我有一张英国邮政编码表。它们的格式都不同,有些大写,有些不大写。我想做的是格式化它们,以便它们可以遵循英国邮政编码标准。例如AB1 2BB 我使用此查询的目的是为了实现这一目的,但有些邮政编码的第一部分较长或较短,因此并非所有查询都成功 SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , 4, 0, ' ')) AS postcode 但是如果我试着用另一种方式来做 SELECT UPPER(INSERT((REPLACE(postcode

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

我使用此查询的目的是为了实现这一目的,但有些邮政编码的第一部分较长或较短,因此并非所有查询都成功

SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , 4, 0, ' ')) AS postcode
但是如果我试着用另一种方式来做

SELECT UPPER(INSERT((REPLACE(postcode , ' ', '')) , -4, 0, ' ')) AS postcode
它不工作,返回所有粘在一起的邮政编码,例如
AB12BB


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

听起来您将要处理的邮政编码如下:

LS10 1DH

LS101DH

LS63DR

等等。我们应该从移除所有空间开始:

REPLACE(postcode,' ','') -- LS10 1DH becomes LS101DH
SELECT UPPER(INSERT(REPLACE(postcode , ' ', ''), LENGTH(REPLACE(postcode , ' ', '')) - 2, 0, ' ')) AS postcode
取最后3个字符:

RIGHT(REPLACE(postcode,' ',''), 3) -- 1DH
以及从最后一个到第三个的所有字符:

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));

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

REPLACE(postcode,' ','') -- LS10 1DH becomes LS101DH
SELECT UPPER(INSERT(REPLACE(postcode , ' ', ''), LENGTH(REPLACE(postcode , ' ', '')) - 2, 0, ' ')) AS postcode
我想你想要:

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

似乎适用于给定的英国邮政编码列表。

请提供样本数据、所需结果、对“英国邮政编码标准”的解释以及“第一部分更长或更短”的含义。