转换失败的字符串到int用例然后在sql中

时间:2019-05-13 12:45:08

标签: sql

我在如下的sql查询中使用情况,

SELECT 
         CASE 
            WHEN Grade = 'Diesel' THEN 4
            WHEN Grade = 'Petrol' THEN 5

       END as Grade
      ,sales

  FROM testTableA as tta

  INNER JOIN testTableB ttb on ttb.productid =  tta.Grade

当我在上面奔跑时,出现"Conversion failed when converting the varchar value 'Diesel' to data type int.“错误。 我也尝试过Cast(tta.Grade,int),但是没有运气。我在这里做错什么了?

修改

testTableA : column grade is varchar.
testTableB: column productid is int

4 个答案:

答案 0 :(得分:1)

您必须返回字符串值,因为$string = get_include_contents('../google_map.php'); // Now, you can just 'echo' it and see the results echo $string; function get_include_contents($filename) { if (is_file($filename)) { ob_start(); include $filename; return ob_get_clean(); } return false; } 具有字符串值,而您的Grade部分也返回了字符串,并且ELSE表达式将仅返回一种类型:

case

编辑:加入也会引起对话问题,因此您必须进行一些对话

SELECT (CASE WHEN Grade = 'Diesel' THEN '4'
             WHEN Grade = 'Petrol' THEN '5'
             ELSE Grade 
        END) as Grade,
 . . . 

答案 1 :(得分:1)

鉴于您的代码示例,有两种可能性:

  • Grade是一个数字,并且错误是由于case将该值与'Diesel'进行了比较。
  • ProductId是一个数字,并且当on的值为Grade时,错误来自'Diesel'条件。

当然,还有其他可能性,例如表引用确实是视图。

没有足够的信息来确定其中哪些实际发生。但是,您知道列的数据类型是什么,因此您可以立即确定问题所在。

如果我不得不猜测,那就是join条件。将名为productId的东西与名为grade的东西连接起来是可疑的。

答案 2 :(得分:1)

从评论来看,我认为您可能正在寻找它:

SELECT 
         CASE 
            WHEN Grade = 'Diesel' THEN 4
            WHEN Grade = 'Petrol' THEN 5

       END as Grade
      ,sales

  FROM testTableA as tta

  INNER JOIN testTableB ttb on ttb.productid =  CASE 
                                                    WHEN tta.Grade = 'Diesel' THEN 4
                                                    WHEN tta.Grade = 'Petrol' THEN 5
                                                 END

答案 3 :(得分:0)

您似乎想加入到case语句的输出中,那么您应该是这样的:

Sidebar

或将SELECT CASE WHEN Grade = 'Diesel' THEN 4 WHEN Grade = 'Petrol' THEN 5 END as Grade ,sales FROM testTableA as tta INNER JOIN testTableB ttb ON ttb.productid = CASE WHEN tta.Grade = 'Diesel' THEN 4 WHEN tta.Grade = 'Petrol' THEN 5 END 包装到子查询中,以避免重复相同的逻辑