【问题标题】:unique wildcard update SQL syntax唯一通配符更新 SQL 语法
【发布时间】:2014-02-13 01:16:09
【问题描述】:

我对 SQL 非常陌生(因为在我的工作中,我已经痛苦地自学了“数据库管理”几个星期……)而且我有点迷茫。我有一个表,其中有一列全是邮政编码,但导入到这个数据库的数据不正确,我们有大量的四位数邮政编码而不是五位数(省略了前导 0)。

我设法让一个脚本正常工作,用正确的五位数邮政编码替换已知的四位数邮政编码,但问题是我们有几十万个条目,我实际上无法通过它们全部找到每个条目都有四位数字并添加零。

我已经复制了数据库并多次破坏它以尝试使某些语法正常工作,但本质上我正在寻找一种快速修复方法,只需将 0 添加到任何四位数的邮政编码,同时留下任何五位数的邮政编码一个人。

有没有一种方法可以让 SQL 脚本简单地使用通配符来表示四个数字,并在开头添加一个零?我在这个地方 (http://www.w3schools.com/sql/sql_wildcards.asp) 搞砸了 45~ 分钟,试图让一些工作无济于事。

非常感谢任何能够提供帮助的人。

相关信息:

  • 表:tbl_Address
  • 列:收件人邮政编码
  • 邮政编码不正确:8481(应为 08481)、8638(应为 08638)等
  • 正确的邮政编码:20872、27501、90039 等

最好, 史蒂夫

【问题讨论】:

  • 如果您不熟悉数据库工作,请提供一些快速建议。您可能希望养成先选择运行更新或删除的习惯(以查看要更新的内容),并在运行任何重大更新之前备份数据。
  • 感谢您的建议,丹!我一定会用谷歌搜索你推荐的那些术语,并将它们纳入我的实践中。我已经做好了备份(我想,哈哈......)。 ;)

标签: sql sql-server replace wildcard


【解决方案1】:

假设没有 zip 长度超过 5 个字符,您可以这样做:

update tbl_Address
set ReceiverPostalCode = right(concat('00', ReceiverPostalCode ), 5) 
where len(ReceiverPostalCode) between 3 and 4

【讨论】:

  • 这在我看来是正确的。您面临的唯一危险是邮政编码的准确性。所以我会通过服务运行这些以确保地址正确(即 Melissa Data)。 +1
  • right(concat('0000', ReceiverPostalCode ), 5) 会更笼统。
  • 有没有一种方法可以验证邮政编码不超过五个字符?我手动扫描了 2500 条记录,但什么也没看到,但我想很有可能至少涉及来自加拿大的邮政编码,并且在开头添加 0 会很糟糕。
  • @user3224945 我相信加拿大邮政编码应该是 6 个字符(如果存储中间空格,则 +1),所以我认为您可能是安全的,但最好检查一下。如果你运行 select max(len(ReceiverPostalCode)) from tbl_Address 它应该返回最长的值。您可以执行以下操作:select len(ReceiverPostalCode), count(*) from tbl_Address group by len(ReceiverPostalCode) order by 1 DESC 以查看存在多少条记录。如果长度看起来很奇怪,那么您可以 select * from tbl_Address where len(ReceiverPostalCode) = ... 专门查看这些记录。
  • 好的,你是对的 - 六是最长的字段,所以我们应该很高兴。我查了一下,我们在 6 处有 116 条记录,在 5 处有一堆记录,大约 5000 条记录不正确(4 位数)。我们显然有 16 个是 3(我认为这意味着它应该有两个 00?)和 34 作为 NULL(那些可以保持 NULL...)。不过,我是否使用 Gordon 或 RedFilter 的示例?有没有一种简单的方法来包含这 16 个缺少两个 0 的条目?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-24
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
相关资源
最近更新 更多