用于标准化PostalCode数据的SQL

时间:2011-05-27 00:53:05

标签: sql sql-server

我有一个SQL Server表,其中一列存储加拿大邮政编码。有时它们的格式为H0H 0H0,其他时间则为H0H0H0或H0H-0H0。我希望能够更新所有记录以将格式标准化为H0H 0H0,但我无法弄清楚SQL。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:5)

UPDATE PostalCodes SET PostalCode = LEFT(PostalCode, 3) + ' ' + RIGHT(PostalCode, 3 )

这假设邮政编码字段已经在左侧和右侧进行了修剪。它实际上抓住了左边的3位数,放置了一个空格,然后是右边的3位数。

答案 1 :(得分:0)

假设存在以下约束:

  • 相关字段的长度始终至少为6个字符。
  • 邮政编码的第一部分位于字段的第1-3列
  • 最后一段位于该字段的最右边3列。
  • 第4列有零个或多个无关字符。

对于字段中的任意数量的字符,这应该可以解决问题。:

update PostalCodes
set PostalCode = stuff( PostalCode , 4 , len(PostalCode) - 6 , ' ' )

或者,你可以做这样的事情 - 一个案例陈述,寻找人们发现创建垃圾邮政编码的所有不同方式,并根据需要对待每一种:

update PostalCodes
set PostalCode = case
                 when PostalCode like '[A-Z][0-9][A-Z][ -][0-9][A-Z][0-9]' then ...
                 when PostalCode like '![A-Z][0-9][A-Z][0-9][A-Z][0-9]'    then ...
                 ...
                 else PostalCode 
                 end

这样的选择语句

选择PostalCode,count(*)    来自PostalCodes    其中PostalCode不喜欢'[A-Z] [0-9] [A-Z] [0-9] [A-Z] [0-9]'    按邮政编码分组    按2 desc排序

应该显示垃圾数据。