1. ホーム
  2. sql

[解決済み] varchar 値 'simple, ' をデータ型 int に変換する際に変換に失敗しました。

2022-02-02 20:39:31

質問

この問題で数日悩んでいるのですが、どうすれば解決できるのかがわかりません。

以下のようにしたい。 group by 値に関する私のテーブル 1 , 2 , 3 , 4 , 5 を作成しましたので テンポラリテーブル をこの値で指定します。

ここで、私は INNER JOIN このテーブルと他のテーブルを a.value = #myTempTable.num .

BUT a.valuentext ということで、必要なのは CONVERT と表示され、実際に行ったことが表示されるのですが、エラーが発生します。

varchar 値 'simple, ' をデータへ変換する際に、変換に失敗しました。 型はintです。 (7行目)

Create table #myTempTable
(
num int
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)

 SELECT a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) AS value, COUNT(*) AS pocet   
 FROM 
 (SELECT item.name, value.value 
  FROM mdl_feedback AS feedback 
  INNER JOIN mdl_feedback_item AS item 
       ON feedback.id = item.feedback
  INNER JOIN mdl_feedback_value AS value 
       ON item.id = value.item 
   WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
 ) AS a 
 INNER JOIN #myTempTable 
     on CONVERT(INT, CONVERT(VARCHAR(12), a.value)) = #myTempTable.num
 GROUP BY a.name, CONVERT(INT, CONVERT(VARCHAR(12), a.value)) ORDER BY a.name

 drop table #myTempTable

このエラーは、最後の INNER JOIN

INNER JOIN #myTempTable on CONVERT(INT, CONVERT(VARCHAR(12), a.value))
= #myTempTable.num

お願いです、助けてください。私は必死です。

ありがとうございます。

解決方法は?

このようなエラーを回避するために CASE + ISNUMERIC で、int型に変換できない場合に対応します。
変更

CONVERT(INT, CONVERT(VARCHAR(12), a.value))

への

CONVERT(INT,
        CASE
        WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
        ELSE 0 END) 

基本的にこれは、もし私をint型に変換できないなら、0を代入してくださいということです(私の例では)。

あるいは、この記事で紹介しているように a.value は数字です。 http://www.tek-tips.com/faqs.cfm?fid=6423