【问题标题】:SQL Server/SSMS, Select > Case statement error "Conversion failed when converting the varchar value '2000.000000' to data type int."SQL Server/SSMS,Select > Case 语句错误“将 varchar 值 '2000.000000' 转换为数据类型 int 时转换失败。”
【发布时间】:2018-04-20 10:33:54
【问题描述】:

我有一个包含多条记录的表(2000 万+)

我有一列,数据类型当前是 varchar,我正在尝试使用 select > case 语句,但是我不断收到以下错误:

"将 varchar 值 '2000.000000' 转换为 数据类型 int。”

我不明白为什么当它是一个数字时它被视为一个 varchar 值。每次我尝试运行代码时,它都会在不同的行、相同的问题、不同的编号上失败

这是我的代码 - 谁能指出我做错了什么?谢谢

   Select 
  Amount_range,
  Sum(isnull(cast(Amount as float),0)) as TotalAmt, 
  count(*) as Count

 FROM (Select Amount, 
                Sum(isnull(cast(Amount as float),0)) as TotalAmt, 
                count(*) as Count,
                  case 
                 when Amount between 0 and 50000.000000 then '0=50'
                 when Amount between 50000.100000 and 100000.000000 then '50=100'
                 when Amount > 100000.000000  then '100+'
                 end as Amount_range
                 from [dbo].[TableName001] group by Amount) a

 where Amount is not null   
 Group by   Amount_range 
 Having count(*) > 0;

谢谢!

【问题讨论】:

  • 列数量的数据类型是什么
  • @JayShankarGupta 它的 varchar。我使用批量插入将数据导入 sql server
  • 我个人建议不要使用float,它不如decimalint准确。

标签: sql sql-server casting int


【解决方案1】:

您还需要将amount 投射到case

Select Amount_range,
       Sum(isnull(cast(Amount as float),0)) as TotalAmt, 
       count(*) as Count
FROM (Select Amount, 
             Sum(isnull(cast(Amount as float),0)) as TotalAmt, 
             count(*) as Count,
             case 
                 when cast(Amount as float) between 0 and 50000.000000 then '0=50'
                 when cast(Amount as float) between 50000.100000 and 100000.000000 then '50=100'
                 when cast(Amount as float) > 100000.000000  then '100+'
             end as Amount_range
             from [dbo].[TableName001] group by Amount) a
 where Amount is not null   
 Group by Amount_range 
 Having count(*) > 0;

【讨论】:

  • 欢迎 :-) @SS360
【解决方案2】:

您需要将数量列转换为浮点数,因为 between 运算符仅适用于数字列,不适用于 varchar 列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-13
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多