Cast时的SQL Server 2008案例

时间:2013-12-30 07:04:09

标签: sql-server sql-server-2008

我无法搞清楚这句话。似乎SQL Server仍然在THEN语句中执行CASE WHEN部分。请参阅此查询。

SELECT 
    CASE 
       WHEN ISNUMERIC('INC') = 1 
       THEN CAST('INC' as numeric(10,2)) 
       ELSE 'FALSE' 
   END AS foo

SQL Server正在返回

  

“将数据类型varchar转换为数字”

时出错

从此查询中,它应返回FALSE并且不会返回错误,因为THEN部分未执行。

我的查询有什么问题?

3 个答案:

答案 0 :(得分:2)

问题是您从同一列返回两种不同的数据类型。所以试试这个 -

DECLARE @value CHAR(3)
SET @value = 66

SELECT 
    CASE WHEN ISNUMERIC(@value) = 1 
        THEN CAST(CAST(@value AS NUMERIC(10,2)) AS VARCHAR(30))
        ELSE 'FALSE'
    END AS foo

答案 1 :(得分:1)

这是因为,您的查询正在尝试

CAST 'FALSE' as Numeric(10,2)

试试这个

SELECT CASE WHEN ISNUMERIC('INC') = 1 THEN 
CAST(CAST('INC' as numeric(10,2)) AS varchar(5))
ELSE 'FALSE' END AS foo

答案 2 :(得分:1)

问题是你CASE个分支的一个分支返回VARCHAR而另一个分支返回一个数字。

尝试以下方法:

CASE WHEN ISNUMERIC('INC') = 1 
    THEN CAST(CAST('INC' AS NUMERIC(10,2)) AS NVARCHAR)
    ELSE 'FALSE' 
END AS foo