sql 邮政编码 space

sql postcode space

我正在努力做到无论邮政编码有多长,最后 3 个字符前总是有一个 space。有时我会收到邮政编码,而人们只输入了 4 个字符,所以代码如下:

UPDATE [DataTool].[dbo].[EH10414 Summer Events]
 SET postcode = CASE WHEN LEN(postcode) = 6 THEN STUFF(postcode, 4, 0, ' ')
                  WHEN LEN(postcode) = 7 THEN STUFF(postcode, 5, 0, ' ')
             END
 WHERE CHARINDEX(' ', postcode, 1) = 0
      AND LEN(postcode) BETWEEN 6 AND 7

用处不大。我得到了这个网站,它确实有效,但不是我想要的。我对 SQL 很陌生,但在访问中我可以使用这个:

更新为:Left([PostCode],Len([PostCode])-3) & " " & Right([PostCode],3)

这很好用,但我不知道如何将其实现到 SQL。

任何帮助都会很棒 :) 谢谢

您的访问代码将在 SQL 服务器中正常工作:

Left(PostCode, Len(PostCode) - 3) + ' '  + Right(PostCode, 3)

我会先检查 space 不存在:

(case when PostCode like '% ___' then PostCode
      else Left(PostCode, Len(PostCode) - 3) + ' '  + Right(PostCode, 3)
 end)

将此实现到 SQL 中的一种方法(通过一些小的调整以获得 SQL 服务器的语法正确)是创建一个用户定义的函数,它接受一个输入邮政编码,并返回一个添加了 space 的新版本:

CREATE FUNCTION SpacePostcode  ( @inputPostcode VARCHAR(8) )
RETURNS VARCHAR(8)
BEGIN
  RETURN Left(@inputPostcode ,Len(@inputPostcode)-3) + ' ' + Right(@inputPostcode,3)
END
GO

然后可以在 select 语句中使用它来格式化输出,例如

SELECT dbo.fnSpacePostcode('EH78PP') AS postCode

或使用

等更新语句更新现有数据
UPDATE myTable
SET PostCode = dbo.fnSpacePostcode(PostCode)