【问题标题】:Conversion error when using case statement - Sql Server使用 case 语句时的转换错误 - Sql Server
【发布时间】:2015-11-03 16:00:00
【问题描述】:

我有以下疑问:

select *, 
case when prod='CPU' and quan>1000 then 1000
     when prod='MOUSE' and quan>1024 then 1024
     when prod='MONITOR' and quan<2 then 2 else quan end as quan
from products_test;

我收到错误:将 varchar 值“CPU”转换为数据类型 int 时转换失败。

【问题讨论】:

  • 好的,prodint。为什么要将它与字符串值'CPU' 进行比较?
  • 发布您的 product_test 数据
  • 他可能在 prod 是 int 的表中有数据并且没有意识到。
  • 为什么要将字符串值传递给 Data-Type int?
  • @GordonLinoff 列“prod”的数据类型为 nvarchar(50)。它不是 int 数据类型。我已经检查过了

标签: sql sql-server tsql


【解决方案1】:

更新:根据问题作者的以下评论

我按照您的描述更改了代码代码,但它仍然在抛出 一个错误。 "转换 varchar 值时转换失败 '23787.1' 到数据类型 int"

它看起来像varchar 类型中的quan 而不是numeric 并且随着错误的变化,它已确认prod 被定义为integer

select *, 
case when CAST(prod AS VARCHAR(MAX))='CPU' and CAST(quan as DECIMAL(10,4))>1000 then 1000
     when CAST(prod AS VARCHAR(MAX))='MOUSE' and CAST(quan as DECIMAL(10,4))>1024 then 1024
     when CAST(prod AS VARCHAR(MAX))='MONITOR' and CAST(quan as DECIMAL(10,4))<2 then 2 else  CAST(quan as DECIMAL(10,4)) end as quan
from products_test;

旧答案:请试试这个修改后的查询:

select *, 
case when CAST(prod AS VARCHAR(MAX))='CPU' and quan>1000 then 1000
     when CAST(prod AS VARCHAR(MAX))='MOUSE' and quan>1024 then 1024
     when CAST(prod AS VARCHAR(MAX))='MONITOR' and quan<2 then 2 else quan end as quan
from products_test;

如果成功,Prod 实际上定义为int 和 您永远无法在 CASE 语句中获得 then(真实情况)值。

您可能需要将具有'CPU', 'MOUSE' and 'MONITOR' 值的主表中的代码或外键与 prod 进行比较。

【讨论】:

  • @Abhi 。 . .我意识到你接受了这个答案,所以你一定发现它以某种方式起作用。但是,从 SQL Server 的角度来看,无论转换是隐式的还是显式的,它都会为无效的格式化数字生成相同的转换错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 2021-04-09
  • 2014-08-16
  • 2016-07-08
  • 2022-12-02
  • 2015-08-09
  • 1970-01-01
相关资源
最近更新 更多