char(6)的字段,存的全是数字,开头的0为什么自动被去掉了?

acneyouth 2010-07-19 05:40:57
这个字段是char(6)的,字段名是mcid ,用insert语句插入了大量原始数据,完了以后才发现000123这样的数字变成了123,用update ××× set mcid = right('000000' + mcid , 6)更新,更新完了还是一样,请大家指点!
...全文
424 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
SQL77 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 acneyouth 的回复:]
除了新建表,别的办法都用了,还是不行。
刚开始的时候,插入数据的语句有问题,insert ××× values('000123'....写成000123了,没加引号,造成了这个问题,update也不行。实在没办法,把数据清空,改了程序,重新插入数据倒是可以了。
谢谢大家
估计以后还会有人遇到这个问题
[/Quote]
因为你没把数值型转成字符,加00000后,默认转123+0 所以还是123
参考类型优先级
htl258_Tony 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 acneyouth 的回复:]
除了新建表,别的办法都用了,还是不行。
刚开始的时候,插入数据的语句有问题,insert ××× values('000123'....写成000123了,没加引号,造成了这个问题,update也不行。实在没办法,把数据清空,改了程序,重新插入数据倒是可以了。
谢谢大家
估计以后还会有人遇到这个问题
[/Quote]11楼可以的。
acneyouth 2010-07-19
  • 打赏
  • 举报
回复
除了新建表,别的办法都用了,还是不行。
刚开始的时候,插入数据的语句有问题,insert ××× values('000123'....写成000123了,没加引号,造成了这个问题,update也不行。实在没办法,把数据清空,改了程序,重新插入数据倒是可以了。
谢谢大家
估计以后还会有人遇到这个问题
htl258_Tony 2010-07-19
  • 打赏
  • 举报
回复
DECLARE @t TABLE (mcid CHAR(6))
INSERT @t SELECT 001234
SELECT * FROM @t
/*
mcid
------
1234

(1 行受影响)

*/

UPDATE @t SET mcid=right('000000' + mcid , 6)
SELECT * FROM @t
/*
mcid
------
1234

(1 行受影响)

*/

UPDATE @t SET mcid=right('000000' + RTRIM(mcid) , 6)
SELECT * FROM @t
/*
mcid
------
001234

(1 行受影响)
*/
htl258_Tony 2010-07-19
  • 打赏
  • 举报
回复
update ××× set mcid = right('000000' + RTRIM(mcid) , 6)
永生天地 2010-07-19
  • 打赏
  • 举报
回复
[Quote=引用楼主 acneyouth 的回复:]
这个字段是char(6)的,字段名是mcid ,用insert语句插入了大量原始数据,完了以后才发现000123这样的数字变成了123,用update ××× set mcid = right('000000' + mcid , 6)更新,更新完了还是一样,请大家指点!
[/Quote]

怪异。
lcw321321 2010-07-19
  • 打赏
  • 举报
回复
楼主肯定在其它地方有隐式转换了,如果你特意在里面插入个字符,你看它报错不,哈哈
TheGodOfGods 2010-07-19
  • 打赏
  • 举报
回复
楼主还可以试试update ××× set mcid = right('000000' + mcid , 11)

王向飞 2010-07-19
  • 打赏
  • 举报
回复
if object_id('Day') is not null
drop table [Day]
go
CREATE TABLE [dbo].[Day](
[mcID] char(6)
)
go
insert into [Day]
select '1'
union all select '2'
union all select '3'
go

update [Day] set mcID = right(cast('00000' as CHAR(6)),5) + mcID
select * from [Day]
TheGodOfGods 2010-07-19
  • 打赏
  • 举报
回复
用varchar(6)再试试
if object_id('Day') is not null
drop table [Day]
go
CREATE TABLE [dbo].[Day](
[mcID] varchar(6) COLLATE Chinese_PRC_CI_AS NOT NULL
)
go
insert into [Day]
select '1'
union all select '2'
union all select '3'

update [day] set mcid = right('000000' + mcid , 6)
select * from [Day]
/*
mcID
------
000001
000002
000003

(3 行受影响)
*/
acneyouth 2010-07-19
  • 打赏
  • 举报
回复
多谢关注,结构如下
CREATE TABLE [dbo].[Day](
[I_DateIndex] [bigint] NOT NULL,
[mcID] [char](6) COLLATE Chinese_PRC_CI_AS NOT NULL,
[I_Date] [int] NOT NULL,
[I_Amount] [float] NOT NULL,
[ID] [int] NOT NULL,
[prop1] [int] NULL,
[prop2] [int] NULL,
[prop3] [int] NULL,
[prop4] [int] NULL
) ON [PRIMARY]
王向飞 2010-07-19
  • 打赏
  • 举报
回复
给出表结构和数据看看
TheGodOfGods 2010-07-19
  • 打赏
  • 举报
回复
无图无真相
bancxc 2010-07-19
  • 打赏
  • 举报
回复
这个问题没遇到过,帮顶一个吧。

幸运的意外 2010-07-19
  • 打赏
  • 举报
回复
这个问题没遇到过,帮顶一个吧。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧