日期:2014-05-19  浏览次数:20466 次

请教数据类型转换的问题
字段   XO(VARCHAR(25))
数据如下
2*3
2.5*2
10.5*6
0.8*3
我想把*号前面的数据转换成如下格式,类型还用VARCHAR
不用临时表直接在SELECT中
有没有什么更有效的方法,我转的过程感觉太麻烦了

020
025
105
008


------解决方案--------------------

declare @str varchar(20)
set @str= '10.5*6 '

select right( '000 '+cast(cast(left(@str,charindex( '* ',@str)-1) as float)*10 as varchar),3)
------解决方案--------------------
要用存储过程实现,把字符串当作表达式
也可用游标

exec(列的内容)
------解决方案--------------------
如果小數的位數固定為一位的話

Select Right(1000 + Cast(Left(XO, CharIndex( '* ', XO) - 1) * 10.0 As Int), 3) From b

------解决方案--------------------
--創建測試環境
Create Table b (XO VARCHAR(25))
Insert b Select '2*3 '
Union All Select '2.5*2 '
Union All Select '10.5*6 '
Union All Select '0.8*3 '
GO
--測試
Select Right(1000 + Cast(Left(XO, CharIndex( '* ', XO) - 1) * 10.0 As Int), 3) As XO From b
GO
--刪除測試環境
Drop Table b
--結果
/*
XO
020
025
105
008
*/