MySQL 控制流函式

神諭丶發表於2015-10-09
以下內容基於MySQL 5.6及更高,大部分函式5.5也基本適用,更低版本請參考對應版本手冊,其內容整理自官方。

mysql常用函式被分為五類,分別為:
①Control Flow:基於一個表示式的結果集選擇不同的值(控制流函式);

②String:字串函式;
http://blog.itpub.net/29773961/viewspace-1813545/

③Date and time:日期和時間;
http://blog.itpub.net/29773961/viewspace-1808967/


④Numeric:數字函式;

http://blog.itpub.net/29773961/viewspace-1813556/

⑤Aggregate:基於一列的多個值返回單一值(聚合函式);
http://blog.itpub.net/29773961/viewspace-1813589/


【Control Flow
】:
IF():基於表示式的結果集選擇兩個不同的值
  1. mysql> SELECT IF(> -3, 'YES', 'NO');
  2. +-------------------------+
  3. | IF(> -3, 'YES', 'NO') |
  4. +-------------------------+
  5. | YES                     |
  6. +-------------------------+
  7. 1 row in set (0.00 sec)
另一個有意思的比較:
  1. mysql> SELECT IF(STRCMP('test','test1'),'no','yes') RESULT;
  2. +--------+
  3. | RESULT |
  4. +--------+
  5. | no     |
  6. +--------+
  7. 1 row in set (0.00 sec)


CASE
  1. mysql> SET @a=1;
  2. 1 row in set (0.00 sec)

  3. mysql> SELECT CASE @a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END RESULT;
  4. +--------+
  5. | RESULT |
  6. +--------+
  7. | one    |
  8. +--------+
  9. 1 row in set (0.00 sec)

  10. mysql> SELECT CASE WHEN 1>THEN 'true' ELSE 'false' END RESULT;
  11. +--------+
  12. | RESULT |
  13. +--------+
  14. | true   |
  15. +--------+
  16. 1 row in set (0.00 sec)


  17. mysql> SELECT CASE '1' WHEN 'a' THEN 'true' WHEN 'b' THEN 'true' END RESULT;    -- 如果沒有else處理,則返回NULL
  18. +--------+
  19. | RESULT |
  20. +--------+
  21. | NULL   |
  22. +--------+
  23. 1 row in set (0.00 sec)


IFNULL(expr1,expr2):如果expr1為null,返回expr2,否則返回expr1。
  1. mysql> SELECT IFNULL(NULL,'hi') test1,
  2.     -> IFNULL(NULL,234) test2,
  3.     -> IFNULL(2/0,456) test3,
  4.     -> IFNULL(3/3,123) test4;
  5. +-------+-------+----------+--------+
  6. | test1 | test2 | test3    | test4  |
  7. +-------+-------+----------+--------+
  8. | hi    | 234   | 456.0000 | 1.0000 |
  9. +-------+-------+----------+--------+
  10. 1 row in set (0.00 sec)
結果集為什麼為456.0000,1.0000是因為mysql中預設的除法將保留4位小數,比如:
  1. mysql> select 3/3;
  2. +--------+
  3. | 3/3    |
  4. +--------+
  5. | 1.0000 |
  6. +--------+
  7. 1 row in set (0.00 sec)


NULLIF(expr1,expr2):如果expr1=expr2,返回NULL,反之返回expr1。
  1. mysql> SELECT NULLIF(-1,3) RESULT, NULLIF('test','test') RESULT;
  2. +--------+--------+
  3. | RESULT | RESULT |
  4. +--------+--------+
  5. | -1     | NULL   |
  6. +--------+--------+
  7. 1 row in set (0.00 sec)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-1813557/,如需轉載,請註明出處,否則將追究法律責任。

相關文章