将varchar转换为Int SQL SERVER

时间:2015-06-23 10:24:39

标签: sql sql-server casting

我需要帮助,我不完全确定如何解决。

这是我的代码:

SELECT DISTINCT

Nr_of_Times_Cust_No_Appears=CASE WHEN CAST(a.TV_Code AS Int)-CAST(BB_Code AS Int)=0 THEN COUNT(*) OVER (PARTITION BY BB_Code) ELSE 'Not same' END
FROM table

基本上,上面的代码是为了确保TV Code和BB Code的减法为零(0),如果不是'Not Same'。 TV Code和BB Code都是CAST到Int的varchar。问题在于ELSE'不相同'。

这是我从SQL SERVER Management Studio获得的输出:

Conversion failed when converting the varchar value 'Not same' to data type int.

我该怎么做才能让它发挥作用?

更新:我终于找到了解决方法。

CAST(COUNT(*) OVER (PARTITION BY XX) AS Varchar).....它有效!!!!

3 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为CASE语句的输出从ELSE返回计数()(整数)与'不相同'(字符串)。它们需要是相同的类型。如果你将你的计数()转换成一个字符串就可以了。

SELECT DISTINCT Nr_of_Times_Cust_No_Appears=
      CASE WHEN CAST(a.TV_Code AS Int)-CAST(BB_Code AS Int)=0 
           THEN CAST(COUNT(*) OVER (PARTITION BY BB_Code) AS VARCHAR)  
           ELSE 'Not same' 
           END
FROM table

<强>替代:

SELECT DISTINCT Nr_of_Times_Cust_No_Appears=
      CASE WHEN CAST(a.TV_Code AS Int)-CAST(BB_Code AS Int)=0 
           THEN COUNT(*) OVER (PARTITION BY BB_Code) 
           ELSE -1 
           END
FROM table

在消费代码中,即用户界面,如果Nr_of_Times_Cust_No_Appears&lt; 0然后显示'不一样'!

答案 1 :(得分:1)

检查变量Nr_of_Times_Cust_No_Appears。它似乎是int,但你尝试设置它'不相同'。

答案 2 :(得分:1)

由于目标列只能有一种数据类型,因此只会发生错误。

CASE语句的第一部分有效地将列类型设置为期望一个整数,因此当您点击ELSE部分并尝试插入Not Same时,您可以使用SELECT Num INTO #T FROM ( SELECT '1' AS Num UNION SELECT '2' ) AS val SELECT CASE WHEN Num = '1' THEN CAST(Num AS INT) ELSE 'Not 1' END AS OutputVal FROM #T DROP TABLE #T 。得到错误。

样品:

NULL

给你:

  

转换varchar值时转换失败&#39;不是1&#39;数据类型int。

所以你需要插入一个可接受的值,可以是SELECT Num INTO #T FROM ( SELECT '1' AS Num UNION SELECT '2' ) AS val SELECT CASE WHEN Num = '1' THEN CAST(Num AS INT) ELSE NULL END AS OutputVal FROM #T DROP TABLE #T

样品:

{{1}}