使用sql server的同一表上的select的Update sql语句未提供正确的数据

使用sql server的同一表上的select的Update sql语句未提供正确的数据,sql,sql-server,Sql,Sql Server,所以早些时候我有一个问题,关于在字段前面添加0,当它是4位数而不是5位数时 对我来说,关键是要用select语句更新到表中,更新到另一列中 我希望我写的代码能起作用,但它最终只是插入了相同的数据 fullzip需要新的邮政编码 SELECT TOP 1000 [ZIP], right( '00000'+convert( varchar(5),ZIP) , 5) as fullzip ,[ZIP_Name] FROM [CC].[dbo].[ServiceableZipCodes]

所以早些时候我有一个问题,关于在字段前面添加0,当它是4位数而不是5位数时

对我来说,关键是要用select语句更新到表中,更新到另一列中

我希望我写的代码能起作用,但它最终只是插入了相同的数据

fullzip需要新的邮政编码

SELECT TOP 1000 [ZIP],
   right( '00000'+convert( varchar(5),ZIP) , 5) as fullzip
  ,[ZIP_Name]
FROM [CC].[dbo].[ServiceableZipCodes]
选择结果

Zip  fullZip   ZIP_Name
2030   02030    Dover
但是,我创建的update语句如下所示,它没有添加零:/

  UPDATE t1
  SET t1.ZipCode = right( '00000'+convert( varchar(5),t2.ZIP) , 5)
  FROM ServiceableZipCodes t1 INNER JOIN ServiceableZipCodes t2 on 
  t1.Zip = t2.zip
  WHERE t1.ZIP_Name = t2.ZIP_NAME
现在,我从更新中插入的新列
ZipCode
,只有4个字符

 DataTypes
 ZipCode   int
 ZIP  float 
看起来是这样的

   ZipCode  Zip   ZIP_Name
   2030       2030    Dover

我做错了什么?

创建一个新列作为varchar(10)(以防您有承运人路线)
Integer datatype should not allow zero in first place
as well as float datatype

for example :

DECLARE @Rate FLOAT
SET @Rate=0125
SELECT @Rate

Output :
125
您正试图插入到包含整数的列中。。。不去上班

你想要一个瓦查尔

以身作则

    ZipCodeFull varchar(10) 
请注意下面的更新语句sql和新列
ZipCodeFull

     UPDATE t1
     SET t1.ZipCodeFull = right( '00000'+convert( varchar(5),t2.ZIP) , 5)
     FROM ServiceableZipCodes t1 INNER JOIN ServiceableZipCodes t2 on 
     t1.Zip = t2.zip
     WHERE t1.ZIP_Name = t2.ZIP_NAME

您现在应该得到正确的结果

创建一个新列作为varchar(10)(如果您有carrier route) 您正试图插入到包含整数的列中。。。不去上班

你想要一个瓦查尔

以身作则

    ZipCodeFull varchar(10) 
请注意下面的更新语句sql和新列
ZipCodeFull

     UPDATE t1
     SET t1.ZipCodeFull = right( '00000'+convert( varchar(5),t2.ZIP) , 5)
     FROM ServiceableZipCodes t1 INNER JOIN ServiceableZipCodes t2 on 
     t1.Zip = t2.zip
     WHERE t1.ZIP_Name = t2.ZIP_NAME

您现在应该得到正确的结果

如果表中的
ZipCode
列的类型为
int
,则它将删除所有前导零。我想这里就是这样

SQLSERVER不会将“02030”视为一个数字。对于
ZipCode
列,最好使用
varchar
类型


希望这有帮助

如果表中的
ZipCode
列的类型为
int
,则它将删除所有前导零。我想这里就是这样

SQLSERVER不会将“02030”视为一个数字。对于
ZipCode
列,最好使用
varchar
类型


希望这有帮助

为什么要在更新中进行自加入?您能给我们看一下您表中的示例数据吗?我只想同时用正确的邮政编码进行更新,如果它是4个数字,那么我想在frontAn
int
列中添加零,它将永远不会“存储”前导零。如果您想要一个数字字符串,该字符串可以在任何位置包含任意数字,并且您不打算对其执行任何数学运算,请使用
varchar
。为什么要在更新中进行自联接?您能给我们看一下您表中的示例数据吗?我只想同时用正确的邮政编码进行更新,如果它是4个数字,那么我想在frontAn
int
列中添加零,它将永远不会“存储”前导零。如果您想要一个可以在任何位置包含任意数字且不打算对其执行任何数学运算的数字字符串,请使用
varchar
。这将是一个很好的注释,但回答很差。请编辑它以添加一些内容。@zohar peled当然你是对的,但公平地说:它确实回答了唯一的问题:)这将是一个很好的评论,但回答很差。请编辑它以添加一些内容。@zohar peled当然你是对的,但公平地说:它确实回答了唯一的问题:)