我有一个带有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
正如你可能已经想到的那样,邮政编码可以从0开始. integers在sql server中不允许0填充.
我看到你的选择:
varchar填充,使用0最多5个字符填充.(你最好这样做)新列的步骤:
varchar(5)为zipCode(newZipCode例如)创建新列将newZipCode列填充为:
update tbl_base
set newZipCode = right('00000' + cast(zipCode as varchar(5)), 5)
删除你的int zipcode列
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填充