1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
| CASE WHEN [test1] THEN [result1]...ELSE [default] END CASE [test] WHEN [val1] THEN [result]...ELSE [default] END IF(test,t,f) IFNULL(arg1,arg2) NULLIF(arg1,arg2)
这些函数的第一个是IFNULL(),它有两个参数,并且对第一个参数进行判断。 如果第一个参数不是NULL,函数就会向调用者返回第一个参数; 如果是NULL,将返回第二个参数。 例如 SELECT IFNULL(1,2), IFNULL(NULL,10), IFNULL(4*NULL,'false');
NULLIF()函数将会检验提供的两个参数是否相等,如果相等,则返回NULL, 如果不相等,就返回第一个参数。 例如 SELECT NULLIF(1,1), NULLIF('A','B'), NULLIF(2+3,4+1);
MySQL的IF()函数也可以建立一个简单的条件测试, 这个函数有三个参数,第一个是要被判断的表达式, 如果表达式为真,IF()将会返回第二个参数, 如果为假,IF()将会返回第三个参数。 例如 SELECT IF(1<10,2,3),IF(56>100,'true','false'); IF()函数在只有两种可能结果时才适合使用。 然而,在现实世界中,我们可能发现在条件测试中会需要多个分支。 在这种情况下,它和PHP及Perl语言的switch-case条件例程一样。
CASE函数的格式有些复杂,通常如下所示: CASE [expression to be evaluated] WHEN [val 1] THEN [result 1] WHEN [val 2] THEN [result 2] WHEN [val 3] THEN [result 3] ...... WHEN [val n] THEN [result n] ELSE [default result] END 这里,第一个参数是要被判断的值或表达式,接下来的是一系列的WHEN-THEN块, 每一块的第一个参数指定要比较的值,如果为真,就返回结果。 所有的WHEN-THEN块将以ELSE块结束,当END结束了所有外部的CASE块时, 如果前面的每一个块都不匹配就会返回ELSE块指定的默认结果。 如果没有指定ELSE块,而且所有的WHEN-THEN比较都不是真,MySQL将会返回NULL。 CASE函数还有另外一种句法,有时使用起来非常方便,如下: CASE WHEN [conditional test 1] THEN [result 1] WHEN [conditional test 2] THEN [result 2] ELSE [default result] END 这种条件下,返回的结果取决于相应的条件测试是否为真。 例如: SELECT CASE 'green' WHEN 'red' THEN 'stop' WHEN 'green' THEN 'go' END;
SELECT CASE 9 WHEN 1 THEN 'a' WHEN 2 THEN 'b' ELSE 'N/A' END;
SELECT CASE WHEN (2+2)=4 THEN 'OK' WHEN (2+2)<>4 THEN 'not OK' END AS STATUS;
SELECT Name,IF((IsActive = 1),'已激活','未激活') AS RESULT FROM UserLoginInfo;
SELECT fname,lname,(math+sci+lit) AS total, CASE WHEN (math+sci+lit) < 50 THEN 'D' WHEN (math+sci+lit) BETWEEN 50 AND 150 THEN 'C' WHEN (math+sci+lit) BETWEEN 151 AND 250 THEN 'B' ELSE 'A' END AS grade FROM marks ;
SELECT IF(ENCRYPT('sue','ts')=upass,'allow','deny') AS LoginResult FROM users WHERE uname = 'sue';
|