【问题标题】:sql server data type conversionsql server 数据类型转换
【发布时间】:2025-11-27 03:40:02
【问题描述】:

我有一个列 Percentage varchar(10) 的表格 该表中的数据是

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

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

我想得到像 0.2,0.4,0.6 这样的结果

【问题讨论】:

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


    【解决方案1】:

    您无法将该 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
    

    【讨论】:

      【解决方案2】:

      试试这个

      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))
      

      【讨论】:

        【解决方案3】:
        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
        

        【讨论】: