|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服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,在此很感谢大家在百忙之中的热心帮助,希望以后大家可以继续共同努力,加油!!
|
|