我在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查询会导致转换错误?即使我没有做任何转换。
答案 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'
)。