SQL CASE语句问题

时间:2015-07-24 14:44:24

标签: sql-server

我在SQL case语句中遇到了else问题。

在我的SQL表格列L_Keyword2中包含以下值且属于varchar类型。

YES,
LAND INCLUDED,
N/APPLICABLE,
3,
1.5,
NO,
4.5+,
OTHER,
NULL,
2,
1,
LAND LEASED,
0,
3.5,
N/A,
OE,
4,
2.5,

当我在case语句中使用此列时,如

SELECT 
    L_Keyword2,
    CASE 
       WHEN class LIKE 'RE_1' THEN L_Keyword2 ELSE 0 END
FROM Mytable

此SQL查询引发错误:

  

转换varchar值时转换失败' 1.5'数据类型int。

为什么此SQL查询会导致转换错误?即使我没有做任何转换。

2 个答案:

答案 0 :(得分:2)

首先,T-SQL中的CASE 一个语句 - 它是一个表达式。因此,它可以从各种WHEN子句返回的所有值必须具有相同的数据类型,如果不是,则SQL Server具有优先级列表({ {3}}) - 在该列表中,int的范围高于varchar

在您的情况下,CASE显然会从int子句返回ELSE,因此它会尝试返回L_Keyword2的值(来自第一个WHEN ... THEN ... 1}}子句)也是Int,因此失败。

答案 1 :(得分:0)

也许这个:

SELECT 
    L_Keyword2,
    CASE 
       WHEN class LIKE 'RE_1' THEN L_Keyword2 ELSE '0' END
FROM Mytable

如果您想使用LIKE put %通配符。否则,它是简单的比较(WHEN class = 'RE_1')。