尝试执行以下命令
select AccountNO,id_Proof,
CASE id_Proof
when id_Proof in('Passport','PAN') then 'P'
else id_Proof
end as abc
from customer2;
它的作用相反
请说明为什么 IN 子句在 case 语句中得到相反的结果
您在下一个语法变体中使用 CASE 运算符:
CASE value WHEN compare_value THEN result [WHEN compare_value THEN result ...] [ELSE result] END
因此,在
when id_Proof in('Passport','PAN') then 'P'
中,表达式 id_Proof in('Passport','PAN')
被视为 compare_value。
取决于当前
id_Proof
,它会产生 1、0 或 NULL。
然后将
id_Proof
与这个1、0或NULL进行比较。
如果值为 1,则
id_Proof
为 'Passport' 或 'PAN',比较结果为 FALSE,不使用该分支中的 result。如果值为 0,则 id_Proof
的字符串类型值将转换为数字数据类型,如果该值没有数字前缀,则生成 0,并且比较结果为 TRUE,则不使用此分支中的结果(如果值从数字开始,然后转换产生非零值,比较产生 FALSE)。如果值为 NULL,则任何列值都会生成 FALSE。
最后几乎任何值都会产生看起来像恢复的结果。
您必须使用 CASE 运算符的第二种形式:
CASE WHEN id_Proof IN ('Passport','PAN') ...