Oracle为空时选择大小写

时间:2019-08-20 19:43:59

标签: sql oracle

我正在尝试使用case语句在数据为null或值为99时返回一个值。oracle可以吗?下面是我的代码不起作用,因为null和null引发错误。当值是NULL或99时,如何使sql语句返回Y;而当值是其他值时,如何返回N?

SELECT CASE StudentStatus 
         WHEN '99' THEN 'Y' 
         WHEN IS NULL THEN 'Y' 
         ELSE 'N' 
     END From USERS

感谢您的帮助!

5 个答案:

答案 0 :(得分:3)

以另一种方式进行操作,让您的case 表达式检查StudentStatus <>'99'的时间:

SELECT CASE when StudentStatus <> '99' then 'N'
         ELSE 'Y' 
       END
From USERS

答案 1 :(得分:1)

SELECT CASE 
         WHEN StudentStatus  = '99' THEN 'Y' 
         WHEN StudentStatus IS NULL THEN 'Y' 
         ELSE 'N' 
       END 
From USERS

OR

SELECT CASE 
         WHEN StudentStatus  = '99' OR StudentStatus IS NULL 
         THEN 'Y'              
         ELSE 'N' 
       END 
From USERS

答案 2 :(得分:1)

您可以使用DECODE重写它:

SELECT DECODE(StudentStatus, '99', 'Y', '', 'Y', 'N')
FROM Users

db<>fiddle demo

输出:

+----------------+-------------------------------------------+
| STUDENTSTATUS  | DECODE(STUDENTSTATUS,'99','Y','','Y','N') |
+----------------+-------------------------------------------+
|            99  | Y                                         |
|                | Y                                         |
|           100  | N                                         |
+----------------+-------------------------------------------+

答案 3 :(得分:1)

您可以在nvl()中使用decode()函数:

 select decode(
               nvl(StudentStatus,99),
                                     99,'Y','N') as status
   from users

Demo

答案 4 :(得分:0)

尝试使用

SELECT CASE WHEN ( StudentStatus  = '99' OR StudentStatus IS NULL ) THEN 'Y' 
       ELSE 'N' END 
From USERS