sql server数据类型转换

时间:2012-06-25 06:37:57

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2000

我的表有列百分比varchar(10) 该表中的数据是

Pecentage
2/10
4/10
6/10
..............

现在我必须将上面的百分比转换为十进制,所以现在我这样做。 从TabName中选择CAST(十进制百分比) 我得到以下异常 将数据类型varchar转换为数字时出错。

我想得到的结果如0.2,0.4,0.6

3 个答案:

答案 0 :(得分:6)

您无法将该varchar格式(2/10)转换为float。您需要获取单个字符串然后执行除法

Declare @Sample Table
(Percentage varchar(10))

Insert into @Sample
values
('2/10'),('4/10'),('6/10')

;With CTE (Numerator,denominator)
as
(
  Select cast(substring(Percentage,0,charindex('/',percentage))as float),
  cast(substring(Percentage,charindex('/',percentage)+1,len(Percentage)) as float)
  from @Sample
)
select Numerator/denominator from CTE 

结果

(No column name)
0.2
0.4
0.6

答案 1 :(得分:1)

试试这个

declare @str varchar(20)='2/10'

select @str, CAST(LEFT(@str,CHARINDEX('/',@str)-1) as DECIMAL(10,5))/CAST(RIGHT(@str,LEN(@str)-CHARINDEX('/',@str)) as DECIMAL(10,5))

答案 2 :(得分:0)

Declare @Temp Table
(Percentage varchar(10))

Insert into @Temp
values
('2/10'),('4/10'),('6/10')


select 
convert(float,SUBSTRING (Percentage ,0 , charindex('/',Percentage)))/    
convert(float,SUBSTRING (Percentage ,charindex('/',Percentage)+1,len(Percentage))) 
as Result

from @Temp