0

我遇到了“将 varchar 值”转换为数据类型 int 时出现“转换失败”的问题。错误,但唯一带有 CONVERT 的代码在 CASE 中,它永远不会被命中。

create table #temp (id int identity(1,1), optionType int, data varchar(100))
insert into #temp
values
(1,'test'),
(1,'1234'),
(1,'1234'),
(2,'12345'),
(2,'5435435')

select
case optionType
    when 1 then data
    when 2 then data                
    when 3 then CONVERT(INT, LEFT(data, CHARINDEX('_', data) - 1))          
end 
from #temp

drop table #temp

为什么会出现错误??

谢谢

4

3 回答 3

1

尝试这个:

select
case optionType
    when 1 then data
    when 2 then data                
    when 3 then LEFT(data, CHARINDEX('_', data) - 1)          
end 
from #temp
于 2012-09-13T08:47:36.933 回答
0

案例的所有“何时”必须返回相同的类型。

您正在尝试返回 INT 和 VARCHAR。

你必须选择!

示例工作代码(带有您的条目)

select
case optionType
    when 1 then data        
end as stringData,
case optionType
   when 2 then convert(INT, data)  
end as numericData
from #temp
于 2012-09-13T08:32:16.787 回答
0

如果你真的想实现这个逻辑,你应该将你的 CASE...WHEN 结构分成两个不同的列,用于返回类型(varchar 和 int):

select
case optionType
    when 1 then data
    when 2 then data
end as VarcharValue,
case optionType
    when 3 then CONVERT(INT, LEFT(data, CHARINDEX('_', data) - 1))        
end as IntValue
from #temp

drop table #temp

或者,如果您的应用程序需要此功能,您应该在数据模型或业务逻辑层中解决对话。

于 2012-09-13T08:39:22.370 回答