壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 432|回复: 0

Sqlserver - 数据转换写法

[复制链接]
发表于 2012/3/21 00:09:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
请教大家一个SQL的写法,需求:我在建View的时候需要把MRN varchar(6)转化成ID varchar(9),ID=900012534,MRN=12534,;SALESREP=12534, SALES_ID = 900012534,MRN的位数是不定的,即把MRN补零后变成8位并且前面加9,环境sqlserver(用Toad连接)
MRN varchar(6) -》 ID varchar(9) 或者是 SALESREP INT -》SALES_ID varchar(9)
我的写法如下:
一:'9' + cast(replace(str(MRN,8),' ','0')as varchar(8))  AS ID;cast('9' + cast(replace(str(SALESREP,8),' ','0')as varchar(8)) as INT) AS SALES_ID,
可以成功生成View
因为Toad工具的不明原因,以上这种写法在使用该建好的view做数据对比的时候会报错,因此我改成下面的写法:
二:Case
      when Len(MRN) = 7 then Convert(varchar(9), '90'+ Convert(varchar(7), MRN))
      when Len(MRN) = 6 then Convert(varchar(9), '900'+ Convert(varchar(7), MRN))
      when Len(MRN) = 5 then Convert(varchar(9), '9000'+ Convert(varchar(7), MRN))
      when Len(MRN) = 4 then Convert(varchar(9), '90000'+ Convert(varchar(7), MRN))
      when Len(MRN) = 3 then Convert(varchar(9), '900000'+ Convert(varchar(7), MRN))
      when Len(MRN) = 2 then Convert(varchar(9), '9000000'+ Convert(varchar(7), MRN))
      else Convert(varchar(9), '90000000'+ Convert(varchar(7), MRN))
end                                                   as ID,
第二种写法在做数据对比时可以通过,但是对于SALES,
转化会出现溢出的情况,
这种写法如果都是varchar的话是没有问题的,如果是INT,ID会随着LEN(MRN)的增大而位数减少
这个问题我已经解决掉,我是这么做的
都是varchar时我用的CASE WHEN
如果是INT时
我用的Convert(INT, 900000000 + MRN)  AS ID
用Toad 可以成功建立和运行DCP,在此很感谢大家在百忙之中的热心帮助,希望以后大家可以继续共同努力,加油!!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 02:56 , Processed in 0.010659 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表