【问题标题】:Error converting data type varchar to float while using ISNULL and NULLIF function in SQL Server 2012在 SQL Server 2012 中使用 ISNULL 和 NULLIF 函数时将数据类型 varchar 转换为浮点数时出错
【发布时间】:2017-08-20 23:42:30
【问题描述】:

当我使用以下 SQL 代码时,我收到此错误:

将数据类型 varchar 转换为 float 时出错

我的代码:

select 
    [DEVELOPIN], 
    avg([DEVELOPINGCOST]) as [AVG DEVELOPINGCOST],
    avg([SOFTWARECOST]) as [ AVG SOFTWARECOST],
    ISNULL(AVG([DEVELOPINGCOST] / NULLIF([SOLDCOPIES], 0)), 'No Sale') as [AVG PER Sale] 
from
    [dbo].[SOFTWARE] 
group by 
    [DEVELOPIN]

错误已被隔离到这个表达式:

ISNULL(AVG([DEVELOPINGCOST] / NULLIF([SOLDCOPIES], 0)), 'No Sale') as [AVG PER Sale]

【问题讨论】:

  • 1.通过一次仅选择 一个 字段并隔离导致问题的字段来完成一些基本故障排除。 2. 导致您的问题的字段的数据类型是什么?
  • ISNULL(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)),'No Sale') as [AVG PER Sale]
  • 我会编辑你的问题。在我编辑您的问题后,请对其进行编辑并添加这些字段的数据类型
  • 以下代码工作正常:选择 [DEVELOPIN],avg([DEVELOPINGCOST])as [AVG DEVELOPINGCOST],avg([SOFTWARECOST]) as [AVG SOFTWARECOST], ISNULL(AVG([DEVELOPINGCOST] /NULLIF([SOLDCOPIES],0)),'0') as [AVG PER Sale] from [dbo].[SOFTWARE] GROUP BY [DEVELOPIN]

标签: sql sql-server-2012 isnull type-conversion


【解决方案1】:

我的错误是因为您在 ISNULL 函数中的第一个表达式的结果是浮点数,并且您正在分配 varchar 类型的值,即当 exp 评估为 null 时“无销售”还要确保 nullif 函数的两个表达式的数据类型匹配 尝试将您的表达式转换为 varchar

select [DEVELOPIN]
      ,avg([DEVELOPINGCOST])as [AVG DEVELOPINGCOST]
      ,avg([SOFTWARECOST]) as [ AVG SOFTWARECOST]
      ,  ISNULL(CAST(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)) as varchar),'No Sale') 
 from[dbo].[SOFTWARE] GROUP BY [DEVELOPIN]

【讨论】:

  • convert(varchar(20),ISNULL(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)),'NO Sale')) as [AVG PER Sale]----- --------仍然有同样的错误
  • 应该是 ISNULL(CAST(AVG([DEVELOPINGCOST]/NULLIF([SOLDCOPIES],0)) as varchar),'No Sale') 尝试运行查询作为响应
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 2017-03-15
  • 2014-10-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多