说明:本文总结自:《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 | |
+------------+----------------+-------------+
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)

【MySQL函数】MySQL 5.5从零开始学第六章的更多相关文章

  1. Java从零开始学十六(多态)

    一.什么是多态 多态性是指允许不同类的对象对同一消息作出响应.多态性包括参数化多态性和包含多态性.多态性语言具有灵活.抽象.行为共享.代码共享的优势,很好的解决了应用程序函数同名问题.多态有两种表现形 ...

  2. 从零开始学安全(六)●黑客常用的Dos命令

    cd   文件路径                      要切换的路径cd \                                     直接回根目录dir              ...

  3. 快学Scala-第六章 对象

    知识点: 1.单例对象 使用object语法结构达到静态方法和静态字段的目的,如下例,对象定义某个类的单个实例,包含想要的特性,对象的构造器在该对象第一次被使用时调用. object Account{ ...

  4. 三十四、MySQL 函数

    MySQL 函数 MySQL 有很多内置的函数,以下列出了这些函数的说明. MySQL 字符串函数 函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII 码. 返回 Cust ...

  5. mysql函数总结

    MySQL函数 MySQL数据库提供了很多函数包括: 数学函数:字符串函数:日期和时间函数:条件判断函数:系统信息函数:加密函数:格式化函数: 一.数学函数 数学函数主要用于处理数字,包括整型.浮点数 ...

  6. 从零开始学 Web 系列教程

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新…… github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:http:/ ...

  7. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

  8. (6)Spring Boot datasource - mysql【从零开始学Spring Boot】

    在任何一个平台都逃离不了数据库的操作,那么在spring boot中怎么接入数据库呢? 很简单,我们需要在application.properties进行配置一下,application.proper ...

  9. Mysql 5.5从零开始学阅读笔记

    第一章 1.什么是数据库? 数据库包含两层含义:保管数据的“仓库”,以及数据管理的方法和技术. 2.表 行被称为记录,列被称为字段 3.主键 primary key,用于唯一标识表中的每一条记录,主键 ...

随机推荐

  1. curl http code 0

    使用curl进行post请求后,接收status code ,结果返回的结果是0 ,但是请求返回的数据是正常的. 检查后发现是执行顺序问题: $response = [ 'statusCode' =& ...

  2. PAT——1045. 快速排序(25)

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列,请问有多 ...

  3. C#中HttpWebRequest的用法详解(转载)

    1.HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.2.命名空间:System.Net3.HttpWebRequest对象不是利用new关键字创建 ...

  4. linux 编译ffmpeg 支持x264, x265

    1. 前言 本教程涉及的ffmpeg, x264, x265 2. 环境依赖 2.1 删除系统中安装的ffmpeg等库 sudo apt-get --purge remove ffmpeg mplay ...

  5. 在 Oracle Linux 6.5 上安装 Oracle 11g 单实例数据库

    Checking the Hardware Requirements 系统必须满足下面最小的硬件要求 Memory Requirements Minimum: 1 GB of RAMRecommend ...

  6. iOS:通信录(完成)(18-01-18更)

    1.读取通信录 1).9.0以前:AddressBook 2).9.0以后:Contacts 2.调用通信录UI(不弄) 1).9.0以前:AddressBookUI 2).9.0以后:Contact ...

  7. iOS中怎么判断可变和不可变的坑(更正版)

    iOS中怎么判断可变和不可变的坑 怎么判断NSString和NSMutableString呢 看题 BOOL result = [" isKindOfClass:[NSMutableStri ...

  8. vue中使用swiper并自定义分页器样式

    一,安装swiper 执行命令 npm install vue-awesome-swiper --save 二,引入swiper import {Swiper} from "vue-awes ...

  9. Delphi XE10.1 引用计数

      以往的Delphi版本,不支持接口的Weak,和UnSafe的引用,支持对象的Weak, UnSafe,而且仅在Android和Ios平台上支持. 现在Delphi XE10.1 Berlin终于 ...

  10. iOS 基于APNS消息推送原理与实现(包括JAVA后台代码)

    Push的原理: Push 的工作机制可以简单的概括为下图   图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple ...