【MySQL函数】MySQL 5.5从零开始学第六章

说明:本文总结自:《MySQL 5.5从零开始学》第六章

MySQL中的函数包括:

数学函数、字符串函数、日期和时间函数、条件判断函数、系统信息函数和加密函数等。

函数:

表示对输入参数值返回一个具有特定关系的值。

一、数学函数

主要的数学函数有:绝对值函数、三角函数(包括正弦函数、余弦函数、正切函数、余切函数等)、

对数函数、随机函数等。(PS:在有错误产生时,数学函数将会返回空值NULL

1.1 绝对值函数ABS(x)

mysql> SELECT ABS(1),ABS(-1.1),ABS(-33);
+--------+-----------+----------+
| ABS(1) | ABS(-1.1) | ABS(-33) |
+--------+-----------+----------+
|      1 |       1.1 |       33 |
+--------+-----------+----------+
1 row in set (0.03 sec)

 1.2返回圆周率函数PI()

mysql> SELECT PI();
+----------+
| PI()     |
+----------+
| 3.141593 |
+----------+
1 row in set (0.00 sec)

 1.3平方根函数SQRT(x)

 PS:SQRT(x)范围非负数x的二次方根

mysql> SELECT SQRT(9),SQRT(10),SQRT(-9);
+---------+--------------------+----------+
| SQRT(9) | SQRT(10)           | SQRT(-9) |
+---------+--------------------+----------+
|       3 | 3.1622776601683795 |     NULL |--负数没有平方根
+---------+--------------------+----------+
1 row in set (0.00 sec)

 1.4求余函数MOD(x,y)

mysql> select MOD(5,2),MOD(7,4),MOD(50,8);
+----------+----------+-----------+
| MOD(5,2) | MOD(7,4) | MOD(50,8) |
+----------+----------+-----------+
|        1 |        3 |         2 |
+----------+----------+-----------+
1 row in set (0.00 sec)

 1.5获取整数的函数CEIL(x)、CEILING(x)、FLOOR(x)

 PS:CEIL(x)、CEILING(x)意义相同

mysql> SELECT CEIL(-2.26),CEIL(2.26),CEILING(-2.26),CEILING(2.26);
+-------------+------------+----------------+---------------+
| CEIL(-2.26) | CEIL(2.26) | CEILING(-2.26) | CEILING(2.26) |
+-------------+------------+----------------+---------------+
|          -2 |          3 |             -2 |             3 |
+-------------+------------+----------------+---------------+
1 row in set (0.00 sec)

mysql> SELECT FLOOR(-2.26),FLOOR(2.26);
+--------------+-------------+
| FLOOR(-2.26) | FLOOR(2.26) |
+--------------+-------------+
|           -3 |           2 |
+--------------+-------------+
1 row in set (0.00 sec)

 1.6获取随机数的函数RAND()和RAND(x)

PS:a.RAND(x)返回一个随机浮点值v,范围在0到1之间。若已制定一个整数参数x,则它被用作种子值,用来产生重复序列。

  b.不带参数的RAND()每次产生的随机数值不同

  c.当RAND()参数相同时,将产生相同的随机数,不同的x产生的随机数值不同

mysql> SELECT RAND(),RAND(),RAND();
+--------------------+--------------------+--------------------+
| RAND()             | RAND()             | RAND()             |
+--------------------+--------------------+--------------------+
| 0.0917864060884215 | 0.6539400337766298 | 0.9943409813515293 |
+--------------------+--------------------+--------------------+
1 row in set (0.00 sec)

mysql> SELECT RAND(5),RAND(5),RAND(6);
+---------------------+---------------------+--------------------+
| RAND(5)             | RAND(5)             | RAND(6)            |
+---------------------+---------------------+--------------------+
| 0.40613597483014313 | 0.40613597483014313 | 0.6563190842571847 |
+---------------------+---------------------+--------------------+
1 row in set (0.00 sec)

 1.7四舍五入函数ROUND(x)、ROUND(x,y)和TRUNCATE(x,y)

PS:a.ROUND(x,y)当y值为负数时,保留的小数点左边的相应位数直接保存为0,不进行四舍五入

b.ROUND(x,y)函数在截取值的时候会四舍五入,而TRUNCATE(x,y)直接截取值,不进行四舍五入

mysql> SELECT ROUND(-2.34),ROUND(-2.56),ROUND(2.34),ROUND(2.56);
+--------------+--------------+-------------+-------------+
| ROUND(-2.34) | ROUND(-2.56) | ROUND(2.34) | ROUND(2.56) |
+--------------+--------------+-------------+-------------+
|           -2 |           -3 |           2 |           3 |
+--------------+--------------+-------------+-------------+
1 row in set (0.00 sec)


mysql> SELECT ROUND(-2.34,1),ROUND(-20.56,-1),ROUND(2.35,1),ROUND(25.56,-1);
+----------------+------------------+---------------+-----------------+
| ROUND(-2.34,1) | ROUND(-20.56,-1) | ROUND(2.35,1) | ROUND(25.56,-1) |
+----------------+------------------+---------------+-----------------+
|           -2.3 |              -20 |           2.4 |              30 |
+----------------+------------------+---------------+-----------------+
1 row in set (0.00 sec)

mysql> SELECT TRUNCATE(-2.34,1),TRUNCATE(-20.56,-1),TRUNCATE(2.35,1),TRUNCATE(25.56,-1);
+-------------------+---------------------+------------------+--------------------+
| TRUNCATE(-2.34,1) | TRUNCATE(-20.56,-1) | TRUNCATE(2.35,1) | TRUNCATE(25.56,-1) |
+-------------------+---------------------+------------------+--------------------+
|              -2.3 |                 -20 |              2.3 |                 20 |
+-------------------+---------------------+------------------+--------------------+
1 row in set (0.00 sec)

 1.8符号函数SIGN(x)

PS:SIGN(x)返回参数的符号,x的值为负、零或正时结果依次为-1、0或1.

mysql> SELECT SIGN(-33),SIGN(0),SIGN(33);
+-----------+---------+----------+
| SIGN(-33) | SIGN(0) | SIGN(33) |
+-----------+---------+----------+
|        -1 |       0 |        1 |
+-----------+---------+----------+
1 row in set (0.00 sec)

 1.9幂运算函数POW(x,y)、POWER(x,y)和EXP(x)

PS:a.POW(x,y)、POWER(x,y)意义相同

b.EXP(x)返回e的x乘方后的值(e的值是多少?答:e=2.71828????

mysql> SELECT POW(2,2),POW(2,-2),POWER(2,2),POW(2,-2);
+----------+-----------+------------+-----------+
| POW(2,2) | POW(2,-2) | POWER(2,2) | POW(2,-2) |
+----------+-----------+------------+-----------+
|        4 |      0.25 |          4 |      0.25 |
+----------+-----------+------------+-----------+
1 row in set (0.00 sec)

mysql> SELECT EXP(3),EXP(-3),EXP(0);
+--------------------+----------------------+--------+
| EXP(3)             | EXP(-3)              | EXP(0) |
+--------------------+----------------------+--------+
| 20.085536923187668 | 0.049787068367863944 |      1 |
+--------------------+----------------------+--------+
1 row in set (0.00 sec)

 1.10对数运算函数LOG(x)和LOG10(x)

PS:a.LOG(x)返回x的自然对数,x相对于基数e的对数。(什么是对数?答:如果a的x次方等于N(a>0,且a不等于1),那么数x叫做以a为底N的对数(logarithm),记作x=logaN。其中,a叫做对数的底数,N叫做真数

b.对数定义域不能为负数,因此LOG(-5)返回结果为NULL

mysql> SELECT LOG(5),LOG(-5);
+--------------------+---------+
| LOG(5)             | LOG(-5) |
+--------------------+---------+
| 1.6094379124341003 |    NULL |
+--------------------+---------+
1 row in set (0.00 sec)

mysql> SELECT LOG10(2),LOG10(100),LOG10(-100);
+--------------------+------------+-------------+
| LOG10(2)           | LOG10(100) | LOG10(-100) |
+--------------------+------------+-------------+
| 0.3010299956639812 |          2 |        NULL |
+--------------------+------------+-------------+
1 row in set (0.00 sec)

 1.11角度与弧度相互转换的函数RADIANS(x)和DEGREES(x)

mysql> SELECT RADIANS(90),RADIANS(180);
+--------------------+-------------------+
| RADIANS(90)        | RADIANS(180)      |
+--------------------+-------------------+
| 1.5707963267948966 | 3.141592653589793 |
+--------------------+-------------------+
1 row in set (0.00 sec)

mysql> SELECT DEGREES(PI()),DEGREES(PI()/2);
+---------------+-----------------+
| DEGREES(PI()) | DEGREES(PI()/2) |
+---------------+-----------------+
|           180 |              90 |
+---------------+-----------------+
1 row in set (0.00 sec)

 1.12正弦函数SIN(x)和反正弦函数ASIN(x)

PS:a.余弦函数COS(x),反余弦函数ACOS(x),正切函数TAN(x),反正切函数ATAN(x),余切函数COT(x)情况类似

b.ASIN(x)返回x的反正弦,若x不在-1到1的范围之内,则返回NULL。

mysql> SELECT SIN(1),ROUND(SIN(PI()));
+--------------------+------------------+
| SIN(1)             | ROUND(SIN(PI())) |
+--------------------+------------------+
| 0.8414709848078965 |                0 |
+--------------------+------------------+
1 row in set (2.68 sec)

mysql> SELECT ASIN(0.8414709848078965),ASIN(3);
+--------------------------+---------+
| ASIN(0.8414709848078965) | ASIN(3) |
+--------------------------+---------+
|                        1 |    NULL |
+--------------------------+---------+
1 row in set (0.01 sec)

二、字符串函数

2.1计算字符串字符数的函数CHAR_LENGTH(str)和字符串长度的函数LENGTH(str)

mysql> SELECT CHAR_LENGTH('zhangmeng'),CHAR_LENGTH(1234);
+--------------------------+-------------------+
| CHAR_LENGTH('zhangmeng') | CHAR_LENGTH(1234) |
+--------------------------+-------------------+
|                        9 |                 4 |
+--------------------------+-------------------+
1 row in set (0.01 sec)

mysql> SELECT LENGTH('zhangmeng'),LENGTH(1234);
+---------------------+--------------+
| LENGTH('zhangmeng') | LENGTH(1234) |
+---------------------+--------------+
|                   9 |            4 |
+---------------------+--------------+
1 row in set (0.00 sec)

 2.2合并字符串函数CONCAT(s1,s2,...)、CONCAT_WS(x,s1,s2,...)

PS:a.CONCAT(s1,s2,...)如何有任何一个参数为NULL,则返回值为NULL。

b.CONCAT_WS(x,s1,s2,...),使用分隔符x将两个字符串连接成一个字符串,同时忽略NULL值

mysql> SELECT CONCAT('MySQL',5.6),CONCAT('MySQL',NULL,5.6);
+---------------------+--------------------------+
| CONCAT('MySQL',5.6) | CONCAT('MySQL',NULL,5.6) |
+---------------------+--------------------------+
| MySQL5.6            | NULL                     |
+---------------------+--------------------------+
1 row in set (0.00 sec)

mysql> SELECT CONCAT_WS('-','MySQL',5.6),CONCAT_WS('*','MySQL',NULL,5.6);
+----------------------------+---------------------------------+
| CONCAT_WS('-','MySQL',5.6) | CONCAT_WS('*','MySQL',NULL,5.6) |
+----------------------------+---------------------------------+
| MySQL-5.6                  | MySQL*5.6                       |
+----------------------------+---------------------------------+
1 row in set (0.00 sec)

 2.3替换字符串的函数INSERT(s1,x,len,s2)

mysql> SELECT INSERT('15271937914',4,4,'****');
+----------------------------------+
| INSERT('15271937914',4,4,'****') |
+----------------------------------+
| 152****7914                      |
+----------------------------------+
1 row in set (0.00 sec)

 2.4字母大写转小写函数LOWER(str)、LCASE(str)

PS:LOWER(str)、LCASE(str)意义相同

mysql> SELECT LOWER('SELECT'),LCASE('DELETE');
+-----------------+-----------------+
| LOWER('SELECT') | LCASE('DELETE') |
+-----------------+-----------------+
| select          | delete          |
+-----------------+-----------------+
1 row in set (0.00 sec)

 2.5字母小写转大写函数UPPER(str)、UCASE(str)

PS:UPPER(str)、UCASE(str)意义相同

mysql> SELECT UPPER('select'),UCASE('Delete');
+-----------------+-----------------+
| UPPER('select') | UCASE('delete') |
+-----------------+-----------------+
| SELECT          | DELETE          |
+-----------------+-----------------+
1 row in set (0.00 sec)

 2.6获取制定长度的字符串的函数LEFT(s,n)和RIGHT(s,n)

mysql> SELECT LEFT('zhangmeng',5);
+---------------------+
| LEFT('zhangmeng',5) |
+---------------------+
| zhang               |
+---------------------+
1 row in set (0.00 sec)

mysql> SELECT RIGHT('zhangmeng',4);
+----------------------+
| RIGHT('zhangmeng',4) |
+----------------------+
| meng                 |
+----------------------+
1 row in set (0.00 sec)

 2.7填充字符串函数LPAD(s1,len,s2)和RPAD(s1,len,s2)

mysql> SELECT LPAD('hello',4,'*'),LPAD('hello',9,'*');
+---------------------+---------------------+
| LPAD('hello',4,'*') | LPAD('hello',9,'*') |
+---------------------+---------------------+
| hell                | ****hello           |
+---------------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT RPAD('hello',4,'*'),RPAD('hello',9,'*');
+---------------------+---------------------+
| RPAD('hello',4,'*') | RPAD('hello',9,'*') |
+---------------------+---------------------+
| hell                | hello****           |
+---------------------+---------------------+
1 row in set (0.00 sec)

 2.8删除空格的函数LTRIM(s)、RTRIM(s)、TRIM(s)

mysql> SELECT '( ball )',CONCAT('(',LTRIM(' ball '),')');
+----------+---------------------------------+
| ( ball ) | CONCAT('(',LTRIM(' ball '),')') |
+----------+---------------------------------+
| ( ball ) | (ball )                         |
+----------+---------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '( ball )',CONCAT('(',RTRIM(' ball '),')');
+----------+---------------------------------+
| ( ball ) | CONCAT('(',RTRIM(' ball '),')') |
+----------+---------------------------------+
| ( ball ) | ( ball)                         |
+----------+---------------------------------+
1 row in set (0.00 sec)

mysql> SELECT '( ball )',CONCAT('(',TRIM(' ball '),')');
+----------+--------------------------------+
| ( ball ) | CONCAT('(',TRIM(' ball '),')') |
+----------+--------------------------------+
| ( ball ) | (ball)                         |
+----------+--------------------------------+
1 row in set (0.00 sec)

 2.9删除指定字符串的函数TRIM(s1 FROM s)

mysql> SELECT TRIM('he' FROM 'hello');
+-------------------------+
| TRIM('he' FROM 'hello') |
+-------------------------+
| llo                     |
+-------------------------+
1 row in set (0.00 sec)

 2.10重复生成字符串的函数REPEAT(s,n)

mysql> SELECT REPEAT('hello',2);
+-------------------+
| REPEAT('hello',2) |
+-------------------+
| hellohello        |
+-------------------+
1 row in set (0.00 sec)

 2.11空格函数SPACE(n)

mysql> SELECT CONCAT('(',SPACE(8),')');
+--------------------------+
| CONCAT('(',SPACE(8),')') |
+--------------------------+
| (        )               |
+--------------------------+
1 row in set (0.00 sec)

 2.12替换函数REPLACE(s,s1,s2)

mysql> SELECT REPLACE('xxx.mysql.com','x','w');
+----------------------------------+
| REPLACE('xxx.mysql.com','x','w') |
+----------------------------------+
| www.mysql.com                    |
+----------------------------------+
1 row in set (0.00 sec)

 2.13比较字符串的大小函数STRCMP(s1,s2)

mysql> SELECT STRCMP('test','test'),STRCMP('test','test1'),STRCMP('test1','test');
+-----------------------+------------------------+------------------------+
| STRCMP('test','test') | STRCMP('test','test1') | STRCMP('test1','test') |
+-----------------------+------------------------+------------------------+
|                     0 |                     -1 |                      1 |
+-----------------------+------------------------+------------------------+
1 row in set (0.00 sec)

 2.14获取子串的函数SUBSTRING(s,n,len)和MID(s,n,len)

PS:SUBSTRING(s,n,len)和MID(s,n,len)意义相同

mysql> SELECT SUBSTRING('breakfast',5) AS col1,SUBSTRING('breakfast',5,3) AS col2,SUBSTRING('lunch',-3),SUBSTRING('lunch',-5,3);
+-------+------+-----------------------+-------------------------+
| col1  | col2 | SUBSTRING('lunch',-3) | SUBSTRING('lunch',-5,3) |
+-------+------+-----------------------+-------------------------+
| kfast | kfa  | nch                   | lun                     |
+-------+------+-----------------------+-------------------------+
1 row in set (0.00 sec)

 2.15匹配子串开始位置的函数LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1)

mysql> SELECT LOCATE('ball','football'),POSITION('ball'in'football'),INSTR('football','ball');
+---------------------------+------------------------------+--------------------------+
| LOCATE('ball','football') | POSITION('ball'in'football') | INSTR('football','ball') |
+---------------------------+------------------------------+--------------------------+
|                         5 |                            5 |                        5 |
+---------------------------+------------------------------+--------------------------+
1 row in set (0.00 sec)

 2.16字符串逆序的函数REVERSE(s)

mysql> SELECT REVERSE('12345');
+------------------+
| REVERSE('12345') |
+------------------+
| 54321            |
+------------------+
1 row in set (0.00 sec) 

 2.17返回制定位置的字符串的函数ELT(n,str1,str2,...)

mysql> SELECT ELT(2,'1st','2st','3st'),ELT(4,'1st','2st','3st');
+--------------------------+--------------------------+
| ELT(2,'1st','2st','3st') | ELT(4,'1st','2st','3st') |
+--------------------------+--------------------------+
| 2st                      | NULL                     |
+--------------------------+--------------------------+
1 row in set (0.00 sec)

 2.18返回制定字符串位置的函数FIELD(s,s1,s2,..)和FIND_IN_SET(s1,s2)

PS:FIELD(s,s1,s2,..)和FIND_IN_SET(s1,s2)意义相同

mysql> SELECT FIELD('hi','hello','hi','hey');
+--------------------------------+
| FIELD('hi','hello','hi','hey') |
+--------------------------------+
|                              2 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> SELECT FIND_IN_SET('hi','hello,hi,hey');
+----------------------------------+
| FIND_IN_SET('hi','hello,hi,hey') |
+----------------------------------+
|                                2 |
+----------------------------------+
1 row in set (0.00 sec)

三、日期和时间函数

3.1获取当前日期的函数CURDATE()、CURRENT_DATE()

PS:a.CURDATE()、CURRENT_DATE()意义相同

b.CURDATE()+0将当前日期值转换为数值型

mysql> SELECT CURDATE(),CURRENT_DATE(),CURDATE()+0;
+------------+----------------+-------------+
| CURDATE()  | CURRENT_DATE() | CURDATE()+0 |
+------------+----------------+-------------+
| 2017-07-13 | 2017-07-13     |    20170713 |
+------------+----------------+-------------+
1 row in set (0.02 sec)

 3.2获取当前时间和函数CURTIME()和CURRENT_TIME()

PS:CURTIME()和CURRENT_TIME()意义相同

mysql> SELECT CURTIME(),CURRENT_TIME(),CURTIME()+0;
+-----------+----------------+-------------+
| CURTIME() | CURRENT_TIME() | CURTIME()+0 |
+-----------+----------------+-------------+
| 17:45:39  | 17:45:39       |      174539 |
+-----------+----------------+-------------+
1 row in set (0.00 sec)

 3.3获取当前日期和时间的函数CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE()

PS:CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE()意义相同

mysql> SELECT CURRENT_TIMESTAMP(),LOCALTIME(),NOW(),SYSDATE();
+---------------------+---------------------+---------------------+---------------------+
| CURRENT_TIMESTAMP() | LOCALTIME()         | NOW()               | SYSDATE()           |
+---------------------+---------------------+---------------------+---------------------+
| 2017-07-13 17:49:54 | 2017-07-13 17:49:54 | 2017-07-13 17:49:54 | 2017-07-13 17:49:54 |
+---------------------+---------------------+---------------------+---------------------+
1 row in set (0.00 sec)

 3.4返回UTC日期的函数UTC_DATE()和返回UTC时间的函数UTC_TIME()

PS:UTC:世界标准时间

mysql> SELECT UTC_DATE(),UTC_TIME(),UTC_DATE()+0;
+------------+------------+--------------+
| UTC_DATE() | UTC_TIME() | UTC_DATE()+0 |
+------------+------------+--------------+
| 2017-07-13 | 09:58:22   |     20170713 |
+------------+------------+--------------+
1 row in set (0.00 sec)

 3.5获取月份的函数MONTH(date)和MONTHNAME(date)

mysql> SELECT MONTH('2017-07-13'),MONTHNAME('2017-07-13');
+---------------------+-------------------------+
| MONTH('2017-07-13') | MONTHNAME('2017-07-13') |
+---------------------+-------------------------+
|                   7 | July                    |
+---------------------+-------------------------+
1 row in set (0.00 sec)

 3.6获取星期的函数DAYNAME(d)、DAYOFWEEK(d)和WEEKDAY(d)

PS:DAYOFWEEK(d)和WEEKDAY(d)函数都是返回指定日期在某一周内的位置

mysql> SELECT DAYNAME('2017-07-13'),DAYOFWEEK('2017-07-13'),WEEKDAY('2017-07-13');
+-----------------------+-------------------------+-----------------------+
| DAYNAME('2017-07-13') | DAYOFWEEK('2017-07-13') | WEEKDAY('2017-07-13') |
+-----------------------+-------------------------+-----------------------+
| Thursday              |                       5 |                     3 |
+-----------------------+-------------------------+-----------------------+

 3.7获取星期数的函数WEEK(d)

PS:WEEK(d)函数查询指定日期是一年中的第几周

mysql> SELECT WEEK('2017-07-13');
+--------------------+
| WEEK('2017-07-13') |
+--------------------+
|                 28 |
+--------------------+
1 row in set (0.00 sec)

 3.8获取天数的函数DAYOFYEAR(d)

PS:DAYOFYEAR(d)函数查询指定日期是一年中的第几天

mysql> SELECT DAYOFYEAR('2017-07-13');
+-------------------------+
| DAYOFYEAR('2017-07-13') |
+-------------------------+
|                     194 |
+-------------------------+
1 row in set (0.00 sec)

 3.9获取年份的函数year(d)

mysql> SELECT YEAR('2017-07-13');
+--------------------+
| YEAR('2017-07-13') |
+--------------------+
|               2017 |
+--------------------+
1 row in set (0.00 sec)

 3.10计算日期的函数(加)DATE_ADD(date,interval expr type),ADDDATE(date,interval expr type)

mysql> SELECT DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 HOUR), 
DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 DAY),
DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 MONTH),
DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 YEAR) G; *************************** 1. row *************************** DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 HOUR): 2017-07-13 20:04:30 DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 DAY): 2017-07-14 19:04:30 DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 MONTH): 2017-08-13 19:04:30 DATE_ADD('2017-07-13 19:04:30',INTERVAL 1 YEAR): 2018-07-13 19:04:30 1 row in set (0.00 sec)


mysql> SELECT ADDDATE('2017-07-13 19:04:30',INTERVAL 1 HOUR),
ADDDATE('2017-07-13 19:04:30',INTERVAL 1 DAY),
ADDDATE('2017-07-13 19:04:30',INTERVAL 1 MONTH),
ADDDATE('2017-07-13 19:04:30',INTERVAL 1 YEAR) G;
*************************** 1. row ***************************
 ADDDATE('2017-07-13 19:04:30',INTERVAL 1 HOUR): 2017-07-13 20:04:30
  ADDDATE('2017-07-13 19:04:30',INTERVAL 1 DAY): 2017-07-14 19:04:30
ADDDATE('2017-07-13 19:04:30',INTERVAL 1 MONTH): 2017-08-13 19:04:30
 ADDDATE('2017-07-13 19:04:30',INTERVAL 1 YEAR): 2018-07-13 19:04:30
1 row in set (0.01 sec)

 3.11计算日期的函数(减)DATE_SUB(date,interval expr type),SUBDATE(date,interval expr type)

mysql> SELECT DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 HOUR),
DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 DAY),
DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 MONTH),
DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 YEAR) G; *************************** 1. row *************************** DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 HOUR): 2017-07-13 18:04:30 DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 DAY): 2017-07-12 19:04:30 DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 MONTH): 2017-06-13 19:04:30 DATE_SUB('2017-07-13 19:04:30',INTERVAL 1 YEAR): 2016-07-13 19:04:30 1 row in set (0.00 sec)

mysql> SELECT SUBDATE('2017-07-13 19:04:30',INTERVAL 1 HOUR),
SUBDATE('2017-07-13 19:04:30',INTERVAL 1 DAY),
SUBDATE('2017-07-13 19:04:30',INTERVAL 1 MONTH),
SUBDATE('2017-07-13 19:04:30',INTERVAL 1 YEAR) G;
*************************** 1. row ***************************
 SUBDATE('2017-07-13 19:04:30',INTERVAL 1 HOUR): 2017-07-13 18:04:30
  SUBDATE('2017-07-13 19:04:30',INTERVAL 1 DAY): 2017-07-12 19:04:30
SUBDATE('2017-07-13 19:04:30',INTERVAL 1 MONTH): 2017-06-13 19:04:30
 SUBDATE('2017-07-13 19:04:30',INTERVAL 1 YEAR): 2016-07-13 19:04:30
1 row in set (0.00 sec)

 3.12计算两个日期之间的间隔天数DATEDIFF(date1,date2)

PS:DATEDIFF(date1,date2)函数返回起始时间date1和结束时间date2之间的天数。date1和date2为日期或

date-and-time表达式,计算中只用到这些值的日期部分。

mysql> SELECT DATEDIFF('2017-07-16 12:51:30','2017-07-13 18:30:30');
+-------------------------------------------------------+
| DATEDIFF('2017-07-16 12:51:30','2017-07-13 18:30:30') |
+-------------------------------------------------------+
|                                                     3 |
+-------------------------------------------------------+
1 row in set (0.00 sec)

3.13格式化输出日期和时间的函数DATE_FORMAT()

mysql> SELECT DATE_FORMAT('2017-07-16 12:39:30','%W %M  %p %Y' );
+----------------------------------------------------+
| DATE_FORMAT('2017-07-16 12:39:30','%W %M  %p %Y' ) |
+----------------------------------------------------+
| Sunday July  PM 2017                               |
+----------------------------------------------------+
1 row in set (0.00 sec)

 四、条件判断函数

4.1条件判断函数IF(expr,v1,v2)

PS:IF(expr,v1,v2)如果表达式expr是TRUE(expr<>0 and expr<>NULL),则IF()的返回值为v1,否则返回值v2.

mysql> SELECT IF(1>2,3,4),IF(1<2,'yes','no'),IF(STRCMP('test','test1'),'no','yes');
+-------------+--------------------+---------------------------------------+
| IF(1>2,3,4) | IF(1<2,'yes','no') | IF(STRCMP('test','test1'),'no','yes') |
+-------------+--------------------+---------------------------------------+
|           4 | yes                | no                                    |
+-------------+--------------------+---------------------------------------+
1 row in set (0.00 sec)

4.2条件判断函数IFNULL()

PS:a.IFNULL()加入v1不为NULL,则IFNULL()的返回值为v1,否则返回值为v2。

b.1/0的结果为NULL

mysql> SELECT IFNULL(1,2),IFNULL(NULL,0),IFNULL(1/0,'wrong');
+-------------+----------------+---------------------+
| IFNULL(1,2) | IFNULL(NULL,0) | IFNULL(1/0,'wrong') |
+-------------+----------------+---------------------+
|           1 |              0 | wrong               |
+-------------+----------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT 1/0;
+------+
| 1/0  |
+------+
| NULL |
+------+
1 row in set (0.00 sec)

 4.3CASE函数

PS:CASE expr WHEN v1 THEN r1 WHEN V2 THEN r2 ELSE rn END

该函数表示,如果expr值等于某个vn,则返回对应位置THEN后面的结果,如果与所有值都不相等,则返回ELSE后面的rn

CASE WHEN v1 THEN r1 WHEN V2 THEN r2 ELSE rn END

该函数表示,某个vn值为TRUE时,返回对应位置THEN后面的结果,如果所有值都不为TRUE,则返回ELSE后面的rn

mysql>  SELECT CASE 'zm' WHEN 'lly' THEN 'chihuo' WHEN 'jzj' THEN 'haok' WHEN 'zm' THEN 'zuibangde' ELSE 'fw' END;
+----------------------------------------------------------------------------------------------------+
| CASE 'zm' WHEN 'lly' THEN 'chihuo' WHEN 'jzj' THEN 'haok' WHEN 'zm' THEN 'zuibangde' ELSE 'fw' END |
+----------------------------------------------------------------------------------------------------+
| zuibangde                                                                                          |
+----------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT CASE WHEN 1<0 THEN 'true' ELSE 'false' END ;
+--------------------------------------------+
| CASE WHEN 1<0 THEN 'true' ELSE 'false' END |
+--------------------------------------------+
| false                                      |
+--------------------------------------------+
1 row in set (0.00 sec)

五、系统信息函数

5.1获取MySQL版本号的函数VERSION();

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 5.6.36    |
+-----------+
1 row in set (0.00 sec)

 5.2获取MySQL服务器当前连接的次数CONNECTION_ID()

PS:SHOW PROCESSLIST;SHOW FULL PROCESSLIST;

processlist 命令的输出结果显示了有哪些线程在运行,不仅可以查看当前所有的连接数,还可以查看当前的

连接状态,帮助识别出有问题的查询语句等。

如果是root账号,能看到所有用户的当前连接,如果是其他普通账号,则只能看到自己占用的连接。

show processlist;只列出前100条,如果想全部列出可使用show full processlist命令。

mysql> SELECT CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               6 |
+-----------------+
1 row in set (0.00 sec)

 5.3查看当前使用的数据库DATABASE(),SCHEMA();

PS:DATABASE(),SCHEMA();意义相同

mysql> SELECT DATABASE(),SCHEMA();
+------------+----------+
| DATABASE() | SCHEMA() |
+------------+----------+
| mysql      | mysql    |
+------------+----------+
1 row in set (0.00 sec)

 5.4获取用户名的函数USER(),CURRENT_USER,CURRENT_USER(),SYSTEM_USER(),SESSION_USER()

mysql> SELECT USER(),CURRENT_USER(),SYSTEM_USER();
+----------------+----------------+----------------+
| USER()         | CURRENT_USER() | SYSTEM_USER()  |
+----------------+----------------+----------------+
| root@localhost | root@localhost | root@localhost |
+----------------+----------------+----------------+
1 row in set (0.00 sec)

 5.5获取字符串的字符集的函数CHARSET(str)

mysql> SELECT CHARSET('abc'),CHARSET(CONVERT('abc' USING latin1)),CHARSET(VERSION());
+----------------+--------------------------------------+--------------------+
| CHARSET('abc') | CHARSET(CONVERT('abc' USING latin1)) | CHARSET(VERSION()) |
+----------------+--------------------------------------+--------------------+
| utf8           | latin1                               | utf8               |
+----------------+--------------------------------------+--------------------+
1 row in set (0.00 sec)

 5.6返回字符串的字符排列方式的函数COLLATION(str)

mysql> SELECT COLLATION(_latin2 'abc'),COLLATION(CONVERT('abc' USING utf8));
+--------------------------+--------------------------------------+
| COLLATION(_latin2 'abc') | COLLATION(CONVERT('abc' USING utf8)) |
+--------------------------+--------------------------------------+
| latin2_general_ci        | utf8_general_ci                      |
+--------------------------+--------------------------------------+
1 row in set (0.00 sec)

 5.7获取最后一个自动生成的ID值的函数LAST_INSERT_ID()

mysql> CREATE TABLE worker(Id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,Name VARCHAR(30));
Query OK, 0 rows affected (0.40 sec)

mysql> INSERT INTO worker VALUES(NULL,'zm');
Query OK, 1 row affected (0.04 sec)

mysql> INSERT INTO worker VALUES(NULL,'jzj');
Query OK, 1 row affected (0.31 sec)

mysql> INSERT INTO worker VALUES(NULL,'lly');
Query OK, 1 row affected (0.00 sec)

mysql> INSERT INTO worker VALUES(NULL,'fw');
Query OK, 1 row affected (0.02 sec)

mysql> SELECT * FROM worker;
+----+------+
| Id | Name |
+----+------+
|  1 | zm   |
|  2 | jzj  |
|  3 | lly  |
|  4 | fw   |
+----+------+
4 rows in set (0.00 sec)

mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
|                4 |
+------------------+
1 row in set (0.27 sec)

 六、加密函数

6.1加密函数PASSWORD(str)

PS:MySQL将PASSWORD函数加密后的密码保存到用户权限表中

mysql> SELECT PASSWORD('helloworld');
+-------------------------------------------+
| PASSWORD('helloworld')                    |
+-------------------------------------------+
| *D35DB127DB631E6E27C6B75E8D376B04F64FAF83 |
+-------------------------------------------+
1 row in set (0.00 sec)

 6.2加密函数MD5(str)

mysql> SELECT MD5('helloworld');
+----------------------------------+
| MD5('helloworld')                |
+----------------------------------+
| fc5e038d38a57032085441e7fe7010b0 |
+----------------------------------+
1 row in set (0.00 sec)

 6.3加密函数ENCODE(str,pswd_str)

mysql> SELECT ENCODE('select','drop'),LENGTH(ENCODE('select','drop'));
+-------------------------+---------------------------------+
| ENCODE('select','drop') | LENGTH(ENCODE('select','drop')) |
+-------------------------+---------------------------------+
| ̒잠                   |                               6 |
+-------------------------+---------------------------------+
1 row in set (0.00 sec)

 6.4解密函数DECODE(crypt_tr,pswd_str)

mysql> select decode(encode('select','drop'),'drop');
+----------------------------------------+
| decode(encode('select','drop'),'drop') |
+----------------------------------------+
| select                                 |
+----------------------------------------+
1 row in set (0.00 sec)

七、其他函数

7.1格式化函数FORMAT(x,n)

mysql> SELECT FORMAT(123.123,2),FORMAT(1234.1,3),FORMAT(123,0);
+-------------------+------------------+---------------+
| FORMAT(123.123,2) | FORMAT(1234.1,3) | FORMAT(123,0) |
+-------------------+------------------+---------------+
| 123.12            | 1,234.100        | 123           |
+-------------------+------------------+---------------+
1 row in set (0.00 sec)

7.2不同进制的数字进行转换的函数CONV(N,from_base,to_base)

mysql> SELECT CONV('A',16,2),CONV(10,10,2),CONV(10,10,8),CONV(10,10,16);
+----------------+---------------+---------------+----------------+
| CONV('A',16,2) | CONV(10,10,2) | CONV(10,10,8) | CONV(10,10,16) |
+----------------+---------------+---------------+----------------+
| 1010           | 1010          | 12            | A              |
+----------------+---------------+---------------+----------------+
1 row in set (0.00 sec)

 7.3IP地址转换为数字的函数INET_ATON(expr)

mysql> SELECT INET_ATON('192.168.1.1');
+--------------------------+
| INET_ATON('192.168.1.1') |
+--------------------------+
|               3232235777 |
+--------------------------+
1 row in set (0.27 sec)

 7.3将数值网络地址转换成字符串网络地址的函数INET_NTOA()

mysql> SELECT INET_NTOA(3232235777);
+-----------------------+
| INET_NTOA(3232235777) |
+-----------------------+
| 192.168.1.1           |
+-----------------------+
1 row in set (0.00 sec)

 7.4改变数据类型的函数CAST(x, AS type) 和CONVERT(x,type)

mysql> SELECT CAST(100 AS CHAR(2)),CONVERT('2017-07-16 22:11:30' ,TIME);
+----------------------+--------------------------------------+
| CAST(100 AS CHAR(2)) | CONVERT('2017-07-16 22:11:30' ,TIME) |
+----------------------+--------------------------------------+
| 10                   | 22:11:30                             |
+----------------------+--------------------------------------+
1 row in set, 1 warning (0.00 sec)

 7.5改变字符集的函数CONVERT(...USING...)

mysql> SELECT CHARSET('string'),CHARSET(CONVERT('string' USING latin1));
+-------------------+-----------------------------------------+
| CHARSET('string') | CHARSET(CONVERT('string' USING latin1)) |
+-------------------+-----------------------------------------+
| utf8              | latin1                                  |
+-------------------+-----------------------------------------+
1 row in set (0.00 sec)

 7.6重复执行指定操作的函数BENCHMARK(count,expr)

mysql> SELECT PASSWORD('helloworld');
+-------------------------------------------+
| PASSWORD('helloworld')                    |
+-------------------------------------------+
| *D35DB127DB631E6E27C6B75E8D376B04F64FAF83 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT BENCHMARK(500000,PASSWORD('helloworld'));
+------------------------------------------+
| BENCHMARK(500000,PASSWORD('helloworld')) |
+------------------------------------------+
|                                        0 |
+------------------------------------------+
1 row in set (0.08 sec)



原文地址:https://www.cnblogs.com/xphdbky/p/7159463.html