MySQL数据库的函数

MySQL函数共有5种,分别为:

  • 控制流程函数
  • 字符串函数
  • 数值函数
  • 日期和时间函数
  • 聚合函数

1. 控制流程函数

1. CASE / WHEN

CASE value WHEN [compare-value] THEN result [WHEN [compare-value] THEN result ...] [ELSE result] END

例如:
mysql> select case 1 when 1 then 'one' when 2 then 'two' else 'more' end result;
//如果value(1)为1,则显示one,如果为2,则显示two,否则显示more
+--------+
| result |
+--------+
| one    |
+--------+

CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END 

mysql>  select case when 1 > 0 then 'true' else 'false' end result;
//如果condition(1 > 0)状态为真则显示true,否则显示false
+--------+
| result |
+--------+
| true   |
+--------+

例如: 查询员工工资等级

首先建立一张员工等级表如下:
mysql> select * from SALGRADE;
+-------+-------+-------+
| grade | losal | hisal |
+-------+-------+-------+
|     1 |   700 |  1200 |
|     2 |  1201 |  1400 |
|     3 |  1401 |  2000 |
|     4 |  2001 |  3000 |
|     5 |  3001 |  9999 |
+-------+-------+-------+

mysql> select ename 员工, sal 薪金, case grade when 1 then '一级'   
    when 2 then '二级'   
    when 3 then '三级'   
    when 4 then '四级'   
    when 5 then '五级'   
    end 等级   
    from EMP, SALGRADE  
    where sal between losal and hisal;
+--------+---------+--------+
| 员工   | 薪金    | 等级   |
+--------+---------+--------+
| xxxx   | 1200.00 | 一级   |
| SMITH  |  800.00 | 一级   |
| ALLEN  | 1600.00 | 三级   |
| WARD   | 1250.00 | 二级   |
| JONES  | 2975.00 | 四级   |
| MARTIN | 1250.00 | 二级   |
| BLAKE  | 2850.00 | 四级   |
| CLARK  | 2450.00 | 四级   |
| SCOTT  | 3000.00 | 四级   |
| KING   | 5000.00 | 五级   |
| TURNER | 1500.00 | 三级   |
| ADAMS  | 1100.00 | 一级   |
| JAMES  |  950.00 | 一级   |
| FORD   | 3000.00 | 四级   |
| MILLER | 1300.00 | 二级   |
+--------+---------+--------+

1.2 IF

IF(expr1, expr2, expr3)
含义:如果expr1是TRUE(不为0且不为NULL)则返回expr2的值否则返回expr3的值。

mysql> select if(1>2, 'yes', 'no') result;
+--------+
| result |
+--------+
| no     |
+--------+

1.3 IFNULL

IFNULL(expr1, expr2)
含义:如果expr1不为NULL,则IFNULL的返回值为expr1的值,否则返回expr2的值。

mysql> select ifnull(1, 0) result;
+--------+
| result |
+--------+
|      1 |
+--------+

2. 字符串函数

2.1 ASCII(str)

返回值为字符串str的最左字符的数值,如果str为空字符串,则返回值为0;如果str为NULL,则返回值为NULL。ASCII()用于带有从0到255的数值的字符。

mysql> select ascii('abc');
+--------------+
| ascii('abc') |
+--------------+
|           97 |
+--------------+

2.2 BIN(N)

返回值为N的二进制值的字符串

mysql> select bin(12);
+---------+
| bin(12) |
+---------+
| 1100    |
+---------+

2.3 CHAR(N, …)

CHAR()将每个参数N理解为一个整数,其返回值为一个包含这些整数的代码值所给出的字符的字符串,NULL值被省略。

mysql> SELECT CHAR(77,121,83,81,76);
+-----------------------+
| CHAR(77,121,83,81,76) |
+-----------------------+
| MySQL                 |
+-----------------------+

3. 数值函数

3.1算术操作符

mysql> select 1+1;
+-----+
| 1+1 |
+-----+
|   2 |
+-----+

mysql> select 3/7;
+--------+
| 3/7    |
+--------+
| 0.4286 |
+--------+

3.2 数学函数

mysql> SELECT ABS(-32);
//返回绝对值
+----------+
| ABS(-32) |
+----------+
|       32 |
+----------+

ASIN(X) 是反正弦函数
ACOS(X)是反余弦函数
.......

4.日期和时间函数

4.1 now

返回当前日期

mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2017-02-24 17:51:01 |
+---------------------+

4.2 date_add/adddate

返回日期加天数后的日期

mysql> select date_add('1998-02-02', INTERVAL 28 DAY) newday;
+------------+
| newday     |
+------------+
| 1998-03-02 |
+------------+

//adddate与date_add用法相同,等价于如下:
SELECT adddate('1998-02-02', INTERVAL 28 DAY);



SELECT adddate('1998-02-02', 28);   //date_add无此用法

4.3datediff

返回两个日期的时间差

mysql> select DATEDIFF(now(),'2015-07-15') 时间差;
+-----------+
| 时间差    |
+-----------+
|       590 |
+-----------+

mysql> select DATEDIFF('2015-07-15', '2017-07-07') 时间差;
+-----------+
| 时间差    |
+-----------+
|      -723 |
+-----------+

4.3 date_format

根据format字符串安排date值的格式
可以有的格式有:

格式  描述
%a  缩写星期名
%b  缩写月名
%c  月,数值
%D  带有英文前缀的月中的天
%d  月的天,数值(00-31)
%e  月的天,数值(0-31)
%f  微秒
%H  小时 (00-23)
%h  小时 (01-12)
%I  小时 (01-12)
%i  分钟,数值(00-59)
%j  年的天 (001-366)
%k  小时 (0-23)
%l  小时 (1-12)
%M  月名
%m  月,数值(00-12)
%p  AM 或 PM
%r  时间,12-小时(hh:mm:ss AM 或 PM)
%S  秒(00-59)
%s  秒(00-59)
%T  时间, 24-小时 (hh:mm:ss)
%U  周 (00-53) 星期日是一周的第一天
%u  周 (00-53) 星期一是一周的第一天
%V  周 (01-53) 星期日是一周的第一天,与 %X 使用
%v  周 (01-53) 星期一是一周的第一天,与 %x 使用
%W  星期名
%w  周的天 (0=星期日, 6=星期六)
%X  年,其中的星期日是周的第一天,4 位,与 %V 使用
%x  年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y  年,4 位
%y  年,2 位

例如:取出当前时间的时分秒

mysql> select DATE_FORMAT(now(), '%H:%i:%s');
+--------------------------------+
| DATE_FORMAT(now(), '%H:%i:%s') |
+--------------------------------+
| 18:07:35                       |
+--------------------------------+

5. 聚合函数

聚合函数的使用方法点击