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) の 2 つの異なる列に分割する必要があります。

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 に答える