CASE
声明
CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END
OR
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
说明
在第一个方案的返回结果中,value
= compare-value
。而第二个方案的返回结果是第一种条件为真。如果没有匹配的结果值,则返回结果为 ELSE 后的结果,如果没有 ELSE 部分,则返回值为 NULL。
例子
obclient> select CASE 'b' when 'a' then 1 when 'b' then 2 END;
+----------------------------------------------+
| CASE 'b' when 'a' then 1 when 'b' then 2 END |
+----------------------------------------------+
| 2 |
+----------------------------------------------+
1 row in set (0.01 sec)
obclient> select CASE concat('a','b') when concat('ab','') then 'a' when 'b' then 'b' end;
+--------------------------------------------------------------------------+
| CASE concat('a','b') when concat('ab','') then 'a' when 'b' then 'b' end |
+--------------------------------------------------------------------------+
| a |
+--------------------------------------------------------------------------+
1 row in set (0.01 sec)
obclient> select case when 1>0 then 'true' else 'false' end;
+--------------------------------------------+
| case when 1>0 then 'true' else 'false' end |
+--------------------------------------------+
| true |
+--------------------------------------------+
1 row in set (0.00 sec)
IF
声明
IF(expr1,expr2,expr3)
说明
如果 expr1
的值为 TRUE(即:expr1
<>0 且 expr1
<>NULL),返回结果为 expr2
;否则返回结果为 expr3
。
IF()
返回结果可以是数值或字符串类型,它取决于使用的内容。
如果 expr2
, expr3
中只有一个明确是 NULL,则 IF()
函数的结果类型为非 NULL 表达式的结果类型。
例子
obclient> select if(5>6, 'T','F'), if (5>6, 1, 0), if(null, 'True', 'False'), if(0, 'True', 'False')\G
*************************** 1. row ***************************
if(5>6, 'T','F'): F
if (5>6, 1, 0): 0
if(null, 'True', 'False'): False
if(0, 'True', 'False'): False
1 row in set (0.01 sec)
IFNULL
声明
IFNULL(expr1, expr2)
说明
假设 expr1
不为 NULL,则 IFNULL()
的返回值为 expr1
;否则其返回值为 expr2
。IFNULL()
的返回值是数值或字符串,具体情况取决于其所使用的语境。
IFNULL()
的默认返回值类型按照以下方式计算:
表达式 | 返回值 |
---|---|
| 字符串 |
| 浮点 |
| 整数 |
假如 expr1
和 expr2
都是字符串,且其中任何一个字符串区分大小写,则返回结果是区分大小写。
例子
obclient> SELECT IFNULL('abc', null), IFNULL(NULL+1, NULL+2), IFNULL(1/0, 0/1);
+---------------------+------------------------+------------------+
| IFNULL('abc', null) | IFNULL(NULL+1, NULL+2) | IFNULL(1/0, 0/1) |
+---------------------+------------------------+------------------+
| abc | NULL | 0.0000 |
+---------------------+------------------------+------------------+
1 row in set (0.01 sec)
NULLIF
声明
NULLIF(expr1, expr2)
说明
如果 expr1
= expr2
成立,那么返回值为 NULL,否则返回值为 expr1
。这和 CASE WHEN
expr1 = expr2 THEN NULL ELSE expr1 END
相同。注意,如果参数不相等,则两次求得的值为 expr1
。
例子
obclient> SELECT NULLIF('ABC', 123), NULLIF('123',123), NULLIF(NULL, 'abc');
+--------------------+-------------------+---------------------+
| NULLIF('ABC', 123) | NULLIF('123',123) | NULLIF(NULL, 'abc') |
+--------------------+-------------------+---------------------+
| ABC | NULL | NULL |
+--------------------+-------------------+---------------------+
1 row in set, 1 warning (0.01 sec)
ORA_DECODE
声明
ORA_DECODE(条件, 值1, 返回值1, 值2, 返回值2, ... 值n, 返回值n, 缺省值)
说明
ORA_DECODE()
函数功能等同于 Oracle 数据库的 DECODE()
函数功能。
该函数的含义如下:
IF 条件=值1
THEN RETURN(返回值1)
ELSIF 条件=值2
THEN RETURN(返回值2)
......
ELSIF 条件=值n
THEN RETURN(返回值n)
ELSE RETURN(缺省值)
END IF