sql邮编空间

Posted

技术标签:

【中文标题】sql邮编空间【英文标题】:sql postcode space 【发布时间】:2015-07-16 14:38:20 【问题描述】:

我正在努力做到这一点,无论邮政编码有多长,它在最后 3 个字符之前总是有一个空格。有时我会收到邮政编码,而人们只输入了 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 中实现它。

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

【问题讨论】:

您的代码将处理哪个(或多个)国家/地区?可能值得注意的是,这些规则因国家/地区而异,而且我知道的至少一个国家(爱尔兰)不一定有与之相关的邮政编码... 【参考方案1】:

您的 Access 代码几乎可以在 SQL Server 中使用:

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

我会先检查是否有空格:

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

【讨论】:

【参考方案2】:

在 SQL 中实现这一点的一种方法(通过一些小的调整来获得 SQL Server 的正确语法)是创建一个用户定义的函数,接受输入的邮政编码,并返回一个添加了空格的新版本:

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)

【讨论】:

这使用了您现有的声明,但我同意 Gordon Linoff 的评论,即首先检查现有空间是一个好主意 - 此函数假定没有现有空间并且您正在寻找返回最多 8 个字符的英国邮政编码

以上是关于sql邮编空间的主要内容,如果未能解决你的问题,请参考以下文章

sql 可用空间表空间

sql-表空间

查看表空间信息SQL集合

Oracle 临时表空间 SQL语句

Oracle 临时表空间 SQL语句

SQL语言空间数据库原理