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邮编空间的主要内容,如果未能解决你的问题,请参考以下文章