SQL中的CASE语句

时间:2017-01-13 15:53:11

标签: sql sql-server

Select CASE WHEN loc ='J' THEN 'Y'
            WHEN loc NOT IN ('J') THEN 'N'
            ELSE 0 END AS loc FROM [prd].[dbo].[GRP]  
            EXCEPT
Select location FROM [prd1].[dbo].[GRPO] WHERE VALUE IN('Y','N');

错误:

  

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

两个表中的两列只有相同的数据类型(varchar)

1 个答案:

答案 0 :(得分:5)

Case语句从result_expressions中的类型集和可选的else_result_expression返回最高优先级类型。由于0 (INT)的优先级高于Y (Varchar),因此Y会隐式转换为INT,因此您会收到转化错误。

0声明中将INT'0')更改为StringELSE

Select CASE WHEN loc = 'J' THEN 'Y'
            WHEN loc <> 'J' THEN 'N' -- loc NOT IN ('J')
ELSE '0' END