在SQL SERVER 2012中将邮政编码更新为Pad with Zeros

Jas*_*ney 1 sql-server

我有一个带有Zipcode列的表.Zipcode列是一个int.如何更新此列以显示填充的零,以便所有值都是5位数?我知道如何将此作为SELECT语句,但我不知道如何更新表中的coulmn.以下是我的最大努力.

USE RTCA_new
GO

UPDATE tbl_BASE
SET Zipcode = (
SELECT FORMAT(Zipcode, '00000')
FROM rtca.tbl_BASE
               )
Run Code Online (Sandbox Code Playgroud)

产生的错误是:

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.该语句已终止.

简而言之,我希望邮政编码值802显示为00802

Kri*_*ner 7

正如你可能已经想到的那样,邮政编码可以从0开始. integers在sql server中不允许0填充.

我看到你的选择:

  1. 总是在选择中填充它
  2. 将列类型更改为更合适的varchar填充,使用0最多5个字符填充.(你最好这样做)

新列的步骤:

  1. varchar(5)zipCode(newZipCode例如)创建新列
  2. newZipCode列填充为:

    update tbl_base set newZipCode = right('00000' + cast(zipCode as varchar(5)), 5)

  3. 删除你的int zipcode

  4. newZipCode列重命名为zipCode

您错误的具体原因:

子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.该语句已终止.

在查询中:

UPDATE tbl_BASE
SET Zipcode = (
SELECT FORMAT(Zipcode, '00000')
FROM rtca.tbl_BASE
               )
Run Code Online (Sandbox Code Playgroud)

是因为您的陈述中存在逻辑错误或类似错误.您正在尝试将标量值(ZipCode)设置为集合的值(您的select format...语句.)

该声明:

SELECT FORMAT(Zipcode, '00000')
FROM rtca.tbl_BASE
Run Code Online (Sandbox Code Playgroud)

它本身会为表中的每一行返回一行,您不能将整个结果集设置为标量值.立即错误可以修复如下:

UPDATE tbl_BASE
SET Zipcode = FORMAT(Zipcode, '00000')
Run Code Online (Sandbox Code Playgroud)

这将为zipcode返回一个值...虽然再次由于你当前的表模式,这不会给你你希望的结果,因为integers不能用0填充