将varchar值“simple”转换为数据类型int时转换失败 [英] Conversion failed when converting the varchar value 'simple, ' to data type int

查看:112
本文介绍了将varchar值“simple”转换为数据类型int时转换失败的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我想要 >我的表上的值 1 2 3 4 5 所以我创建了一个 temporary $ b

现在我必须将 INNER JOIN 这个表格与

a.value =#myTempTable.num



a.value 是 ntext 所以我需要 CONVERT 它实际上是我做的,但我得到错误:


将varchar值simple转换为数据
类型int时转换失败。 (在第7行)



 创建表#myTempTable 

(1),(2),(3),(4),(5)

插入到#myTempTable(num)中的数字

SELECT a.name ,CONVERT(INT,CONVERT(VARCHAR(12),a.value))AS值,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)
)作为
INNER JOIN #myTempTable
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 #myTempT能够在CONVERT(INT,CONVERT(VARCHAR(12),a.value))
=#myTempTable.num

你能帮助我吗?我很绝望。



谢谢。

解决方案

这样的错误你可以使用 CASE + ISNUMERIC 来处理无法转换为int的场景。

更改

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

至$ / $>

 <$ c $ (CONVERT(VARCHAR(12),a.value)
ELSE 0 END)

基本上这是说如果你不能将我转换为int赋值为0(在我的例子中)

或者你可以看看这篇关于创建一个自定义函数的文章,它将检查 a.value 是否是数字: http://www.tek-tips.com/faqs.cfm?fid = 6423


I am struggling for a few days with this issue and I can't figure out how can I fix it.

I would like to group by my table on values 1,2,3,4,5 so I have created a temporary table with this values.

Now I have to INNER JOIN this table with other tables on a.value = #myTempTable.num.

BUT a.value is ntext so I need to CONVERT it what I actually did, but I am getting an error:

Conversion failed when converting the varchar value 'simple, ' to data type int. (on line 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

I am not getting this error without the last INNER JOIN

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

Could you help me please? I am desperate.

Thanks.

解决方案

In order to avoid such error you could use CASE + ISNUMERIC to handle scenarios when you cannot convert to int.
Change

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

To

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

Basically this is saying if you cannot convert me to int assign value of 0 (in my example)

Alternatively you can look at this article about creating a custom function that will check if a.value is number: http://www.tek-tips.com/faqs.cfm?fid=6423

这篇关于将varchar值“simple”转换为数据类型int时转换失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆