Oracle SQL中使用CASE语句映射NULL值的问题求助
解决CASE语句匹配NULL值的问题
问题原因
你使用的是简单CASE表达式(CASE ID WHEN ...),这种写法会将ID与每个WHEN后的值做相等比较。但SQL中NULL = NULL的结果是UNKNOWN,永远不会匹配成功,所以ID为NULL时会直接进入ELSE分支返回OTHER STATE。
解决方案
改用搜索CASE表达式,直接在WHEN后编写布尔判断条件,用ID IS NULL来匹配NULL值,这是SQL中判断NULL的标准写法,能正确触发对应分支:
SELECT ID, CASE WHEN ID = 'TR' THEN 'TRIPURA' WHEN ID = 'MN' THEN 'MANIPUR' WHEN ID = 'AS' THEN 'ASSAM' WHEN ID = 'NL' THEN 'NAGALAND' WHEN ID = 'AN' THEN 'ARUNACHAL' WHEN ID IS NULL THEN 'NO STATE' ELSE 'OTHER STATE' END AS STATE FROM GEOGRAPHY;
这种写法每个分支独立判断条件,WHEN ID IS NULL会精准匹配ID为NULL的记录,返回NO STATE,其他非匹配值则进入ELSE分支。
内容的提问来源于stack exchange,提问作者ANUD
相关产品推荐
相关产品推荐

