sql 拷贝列问题

橙色阳光 2014-10-23 11:16:14


如上图,需要将itemCode_C 这一列数据 TB2014-8 去掉 TB 和 - 剩 20148 拷贝到另一列中去 这个SQL 怎么写?

insert into ProjectInformation(sysSort) ----sysSort列为int
select itemCode_C from ProjectInformation -- itemCode_C 为varchar(50)

...全文
133 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2014-10-23
  • 打赏
  • 举报
回复
/* 同一行字段之间应该是更新而不是插入。
唯一要担心的就是数字太长,转 int 会溢出。*/
UPDATE ProjectInformation
set sysSort = Convert(int,Replace(SubString(itemCode_C,3,48),'-',''))
from ProjectInformation
Tiger_Zhao 2014-10-23
  • 打赏
  • 举报
回复
如果你的 sysSort 是用来排序的话,超过一年不就有问题了?
20151 比 201410 小啊!

既然序号最多4位,建议将字段改为varchar(11),避免插入超限的数据。
然后用
Convert(int,SubString(itemCode_C,3,4)) * 10000 + Convert(int,SubString(itemCode_C,8,4))
橙色阳光 2014-10-23
  • 打赏
  • 举报
回复
引用 3 楼 Tiger_Zhao 的回复:
9位最保险,10位大部分都超过了。 所以你要重新分析一下需求,这样的设计是否可行。
够用了 2014 年份 + XXXX 一年也就几千个 最多也就8位 好了 结贴了 各位辛苦了
还在加载中灬 2014-10-23
  • 打赏
  • 举报
回复
如果是2013的话,10位还不会超过,如果真是年数,还可以用到2147年,嘎嘎
Tiger_Zhao 2014-10-23
  • 打赏
  • 举报
回复
9位最保险,10位大部分都超过了。
所以你要重新分析一下需求,这样的设计是否可行。
橙色阳光 2014-10-23
  • 打赏
  • 举报
回复
引用 1 楼 Tiger_Zhao 的回复:
/* 同一行字段之间应该是更新而不是插入。
   唯一要担心的就是数字太长,转 int 会溢出。*/
UPDATE ProjectInformation
   set sysSort = Convert(int,Replace(SubString(itemCode_C,3,48),'-',''))
  from ProjectInformation
int 的最大值是多少 几位? 是百度知道上说的 int 最大2,147,483,647存储大小为 4 个字节。 差不多 10位吗?

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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