MySQL 函数

MySQL 函数

一、字符串函数:

ASCII(s): 返回字符串 s 的第一个字符的 ASCII 码。

mysql> select ASCII('abcd');
+---------------+
| ASCII('abcd') |
+---------------+
|            97 |
+---------------+
1 row in set (0.01 sec)

CHAR_LENGTH(s):返回字符串 s 的字符数 。

mysql> select CHAR_LENGTH('abcd');
+---------------------+
| CHAR_LENGTH('abcd') |
+---------------------+
|                   4 |
+---------------------+
1 row in set (0.01 sec)

CHARACTER_LENGTH(s):返回字符串 s 的字符数。

mysql> select CHARACTER_LENGTH('abcd');
+--------------------------+
| CHARACTER_LENGTH('abcd') |
+--------------------------+
|                        4 |
+--------------------------+
1 row in set (0.00 sec)

CONCAT(s1,s2…sn):字符串 s1,s2 等多个字符串合并为一个字符串。

mysql> select CONCAT('a', 'b', 'c') as ConCat;
+--------+
| ConCat |
+--------+
| abc    |
+--------+
1 row in set (0.00 sec)

CONCAT_WS(x, s1,s2…sn):同 CONCAT(s1,s2,…) 函数,但是每个字符串之间要加上 x,x 可以是分隔符。

mysql> select CONCAT_WS('-', 'a', 'b', 'c') as Concat;
+--------+
| Concat |
+--------+
| a-b-c  |
+--------+
1 row in set (0.00 sec)

FIELD(s,s1,s2…):返回第一个字符串 s 在字符串列表(s1,s2…)中的位置。

# 位置从1开始计算
mysql> select FIELD('a', 'a', 'b', 'c') as FIELD;
+-------+
| FIELD |
+-------+
|     1 |
+-------+
1 row in set (0.01 sec)

FIND_IN_SET(s1,s2):返回在字符串s2中与s1匹配的字符串的位置。

# 位置从1开始计算
mysql> select FIND_IN_SET('a', 'a,b,c,d,e,f') as FIND_IN_SET;
+-------------+
| FIND_IN_SET |
+-------------+
|           1 |
+-------------+
1 row in set (0.00 sec)

FORMAT(x,n):函数可以将数字 x 进行格式化,将 x 保留到小数点后 n 位,最后一位四舍五入。

mysql> select FORMAT(66.6666, 3) as FORMAT;
+--------+
| FORMAT |
+--------+
| 66.667 |
+--------+
1 row in set (0.00 sec)

INSERT(s1,x,len,s2):字符串 s2 替换 s1 的 x 位置开始长度为 len 的字符串。

# 位置也是从1开始计算
mysql> select INSERT("WWW.baidu.com", 1, 3 ,"www") as Name;
+---------------+
| Name          |
+---------------+
| www.baidu.com |
+---------------+
1 row in set (0.00 sec)

LOCATE(s1,s):从字符串 s 中获取 s1 的开始位置。

mysql> select LOCATE('a', 'abc') as LOCATE;
+--------+
| LOCATE |
+--------+
|      1 |
+--------+
1 row in set (0.01 sec)

LCASE(s):将字符串 s 的所有字母变成小写字母。

mysql> select LCASE('ABC') as LCASE;
+-------+
| LCASE |
+-------+
| abc   |
+-------+
1 row in set (0.00 sec)

LEFT(s,n): 返回字符串 s 的前 n 个字符。

mysql> select LEFT('abc', 2);
+----------------+
| LEFT('abc', 2) |
+----------------+
| ab             |
+----------------+
1 row in set (0.00 sec)

LOWER(s):将字符串 s 的所有字母变成小写字母。

mysql> select LOWER('ABCDEF');
+-----------------+
| LOWER('ABCDEF') |
+-----------------+
| abcdef          |
+-----------------+
1 row in set (0.00 sec)

LPAD(s1,len,s2):在字符串 s1 的开始处填充字符串 s2,使字符串长度达到 len。

mysql> select LPAD('cd', 4, 'ab');
+---------------------+
| LPAD('cd', 4, 'ab') |
+---------------------+
| abcd                |
+---------------------+
1 row in set (0.00 sec)

LTRIM(s): 去掉字符串 s 开始处的空格。

mysql> select LTRIM('   注意前面有空格');
+----------------------------+
| LTRIM('   注意前面有空格') |
+----------------------------+
| 注意前面有空格             |
+----------------------------+
1 row in set (0.00 sec)

MID(s,n,len): 从字符串 s 的 n 位置截取长度为 len 的子字符串。

# 截取'www.baidu.com' 从第五个位置开始截取, 截取5个字符
mysql> select MID('www.baidu.com', 5, 5);
+----------------------------+
| MID('www.baidu.com', 5, 5) |
+----------------------------+
| baidu                      |
+----------------------------+
1 row in set (0.00 sec)

POSITION(s1 IN s):从字符串 s 中获取 s1 的开始位置。

mysql> select POSITION('c' IN 'abcdef');
+---------------------------+
| POSITION('c' IN 'abcdef') |
+---------------------------+
|                         3 |
+---------------------------+
1 row in set (0.00 sec)

REPEAT(s,n): 将字符串 s 重复 n 次。

# 将字符串'abc' 重复3次
mysql> select REPEAT('abc', 3);
+------------------+
| REPEAT('abc', 3) |
+------------------+
| abcabcabc        |
+------------------+
1 row in set (0.00 sec)

REPLACE(s,s1,s2):将字符串 s2 替代字符串 s 中的字符串 s1。

mysql> select REPLACE('abcdef', 'a', 'A');
+-----------------------------+
| REPLACE('abcdef', 'a', 'A') |
+-----------------------------+
| Abcdef                      |
+-----------------------------+
1 row in set (0.00 sec)

REVERSE(s):将字符串s的顺序反过来。

mysql> select REVERSE('abc');
+----------------+
| REVERSE('abc') |
+----------------+
| cba            |
+----------------+
1 row in set (0.00 sec)

RIGHT(s,n): 返回字符串 s 的后 n 个字符。

mysql> select RIGHT('abc', 2);
+-----------------+
| RIGHT('abc', 2) |
+-----------------+
| bc              |
+-----------------+
1 row in set (0.00 sec)

RPAD(s1,len,s2): 在字符串 s1 的结尾处添加字符串 s2,使字符串的长度达到 len。

mysql> select RPAD('abc', 5, 'de');
+----------------------+
| RPAD('abc', 5, 'de') |
+----------------------+
| abcde                |
+----------------------+
1 row in set (0.00 sec)

RTRIM(s): 去掉字符串 s 结尾处的空格。

mysql> select RTRIM('去掉结尾空格  ');
+-------------------------+
| RTRIM('去掉结尾空格  ') |
+-------------------------+
| 去掉结尾空格            |
+-------------------------+
1 row in set (0.00 sec)

SPACE(n):返回n个空格。

mysql> select SPACE(6);
+----------+
| SPACE(6) |
+----------+
|          |
+----------+
1 row in set (0.00 sec)

STRCMP(s1,s2): 比较字符串 s1 和 s2,如果 s1 与 s2 相等返回 0 ,如果 s1>s2 返回 1,如果 s1<s2 返回 -1。

mysql> select STRCMP('abc', 'abc');
+----------------------+
| STRCMP('abc', 'abc') |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.01 sec)

SUBSTR(s, start, length):从字符串 s 的 start 位置截取长度为 length 的子字符串。

mysql> select SUBSTR('baidu', 4,2);
+----------------------+
| SUBSTR('baidu', 4,2) |
+----------------------+
| du                   |
+----------------------+
1 row in set (0.00 sec)

SUBSTRING(s, start, length):从字符串 s 的 start 位置截取长度为 length 的子字符串。

mysql> select SUBSTRING('baidu', 4, 2);
+--------------------------+
| SUBSTRING('baidu', 4, 2) |
+--------------------------+
| du                       |
+--------------------------+
1 row in set (0.00 sec)

TRIM(s): 去掉字符串 s 开始和结尾处的空格。

mysql> select TRIM('   空格   ');
+--------------------+
| TRIM('   空格   ') |
+--------------------+
| 空格               |
+--------------------+
1 row in set (0.00 sec)

UCASE(s):将字符串转换为大写。

mysql> select UCASE('abc');
+--------------+
| UCASE('abc') |
+--------------+
| ABC          |
+--------------+
1 row in set (0.00 sec)

UPPER(s):将字符串转换为大写。

mysql> select UPPER('abc');
+--------------+
| UPPER('abc') |
+--------------+
| ABC          |
+--------------+
1 row in set (0.00 sec)

二、数字函数:

ABS(x): 返回 x 的绝对值。

mysql> select ABS(-1);
+---------+
| ABS(-1) |
+---------+
|       1 |
+---------+
1 row in set (0.01 sec)

ACOS(x): 求 x 的反余弦值(参数是弧度)。

mysql> select ACOS(0.25);
+-------------------+
| ACOS(0.25)        |
+-------------------+
| 1.318116071652818 |
+-------------------+
1 row in set (0.00 sec)

ASIN(x):求反正弦值(参数是弧度)。

mysql> select ASIN(0.25);
+---------------------+
| ASIN(0.25)          |
+---------------------+
| 0.25268025514207865 |
+---------------------+
1 row in set (0.00 sec)

ATAN(x):求反正切值(参数是弧度)。

mysql> select ATAN(0.25);
+---------------------+
| ATAN(0.25)          |
+---------------------+
| 0.24497866312686414 |
+---------------------+
1 row in set (0.00 sec)

ATAN2(n, m):求反正切值(参数是弧度)。

mysql> select ATAN2(-0.8, 2);
+---------------------+
| ATAN2(-0.8, 2)      |
+---------------------+
| -0.3805063771123649 |
+---------------------+
1 row in set (0.00 sec)

AVG(expression): 返回一个表达式的平均值,expression 是一个字段。

mysql> select AVG('表字段');

CEIL(x): 返回大于或等于 x 的最小整数。

mysql> select CEIL(2.31);
+------------+
| CEIL(2.31) |
+------------+
|          3 |
+------------+
1 row in set (0.00 sec)

CEILING(x):返回大于或等于 x 的最小整数。

mysql> select CEILING(2.31);
+---------------+
| CEILING(2.31) |
+---------------+
|             3 |
+---------------+
1 row in set (0.00 sec)

COUNT(expression): 返回查询的记录总数,expression 参数是一个字段或者 * 号。

select COUNT(*);  或  select COUNT('表字段')

n DIV m: 整除,n 为被除数,m 为除数。

mysql> select 6 DIV 2;
+---------+
| 6 DIV 2 |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)

EXP(x):返回 e 的 x 次方。

mysql> select EXP(2);
+------------------+
| EXP(2)           |
+------------------+
| 7.38905609893065 |
+------------------+
1 row in set (0.01 sec)

FLOOR(x):返回小于或等于 x 的最大整数。

mysql> select FLOOR(1.5);
+------------+
| FLOOR(1.5) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

GREATEST(v1, v2, v3…):返回列表中的最大值。

mysql> select GREATEST(1, 2, 3, 4, 5, 6);
+----------------------------+
| GREATEST(1, 2, 3, 4, 5, 6) |
+----------------------------+
|                          6 |
+----------------------------+
1 row in set (0.00 sec)

LEAST(v1, v2, v3 …):返回列表中的最小值。

mysql> select LEAST(1, 2, 3, 4, 0);
+----------------------+
| LEAST(1, 2, 3, 4, 0) |
+----------------------+
|                    0 |
+----------------------+
1 row in set (0.00 sec)

LN:返回数字的自然数。

mysql> select LN(2);
+--------------------+
| LN(2)              |
+--------------------+
| 0.6931471805599453 |
+--------------------+
1 row in set (0.01 sec)

LOG10(x):返回以 10 为底的对数。

mysql> select LOG10(2);
+--------------------+
| LOG10(2)           |
+--------------------+
| 0.3010299956639812 |
+--------------------+
1 row in set (0.00 sec)

MAX(expression): 返回字段 expression 中的最大值。

select MAX('字段');

MIN(expression):返回字段 expression 中的最小值。

select MIN('字段')

MOD(x,y):返回 x 除以 y 以后的余数。

mysql> select MOD(5,2);
+----------+
| MOD(5,2) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

PI(): 返回圆周率(3.141593)。

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

POW(x,y):返回 x 的 y 次方。

# 23次方
mysql> select POW(2,3);
+----------+
| POW(2,3) |
+----------+
|        8 |
+----------+
1 row in set (0.00 sec)

POWER(x,y):返回 x 的 y 次方。

mysql> select POWER(2,3);
+------------+
| POWER(2,3) |
+------------+
|          8 |
+------------+
1 row in set (0.00 sec)

RAND(): 返回 0 到 1 的随机数。

mysql> select RAND();
+--------------------+
| RAND()             |
+--------------------+
| 0.5143183549068108 |
+--------------------+
1 row in set (0.00 sec)

ROUND(x):返回离 x 最近的整数。

mysql> select ROUND(1.232132132);
+--------------------+
| ROUND(1.232132132) |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

SIGN(x): 返回 x 的符号,x 是负数、0、正数分别返回 -1、0 和 1。

mysql> select SIGN(-123);
+------------+
| SIGN(-123) |
+------------+
|         -1 |
+------------+
1 row in set (0.00 sec)

SQRT(x):返回x的平方根。

mysql> select SQRT(25);
+----------+
| SQRT(25) |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

SUM(expression):返回指定字段的总和。

select SUM('字段')

TRUNCATE(x,y): 返回数值 x 保留到小数点后 y 位的值(与 ROUND 最大的区别是不会进行四舍五入)。

mysql> select TRUNCATE(1.23456, 2);
+----------------------+
| TRUNCATE(1.23456, 2) |
+----------------------+
|                 1.23 |
+----------------------+
1 row in set (0.00 sec)

三、日期函数:

ADDDATE(d,n): 计算起始日期 d 加上 n 天的日期。

mysql> select ADDDATE('2019-08-24', 30);
+---------------------------+
| ADDDATE('2019-08-24', 30) |
+---------------------------+
| 2019-09-23                |
+---------------------------+
1 row in set (0.00 sec)

ADDTIME(t,n):时间 t 加上 n 秒的时间。

mysql> select ADDTIME('2019-08-24 15:21:10' ,5);
+-----------------------------------+
| ADDTIME('2019-08-24 15:21:10' ,5) |
+-----------------------------------+
| 2019-08-24 15:21:15               |
+-----------------------------------+
1 row in set (0.00 sec)

CURDATE():返回当前日期。

mysql> select CURDATE();
+------------+
| CURDATE()  |
+------------+
| 2019-08-24 |
+------------+
1 row in set (0.00 sec)

CURRENT_DATE(): 返回当前日期。

mysql> select CURRENT_DATE();
+----------------+
| CURRENT_DATE() |
+----------------+
| 2019-08-24     |
+----------------+
1 row in set (0.00 sec)

CURRENT_TIME():返回当前时间。

mysql> select CURRENT_TIME();
+----------------+
| CURRENT_TIME() |
+----------------+
| 15:23:58       |
+----------------+
1 row in set (0.00 sec)

CURRENT_TIMESTAMP():返回当前日期和时间。

mysql> select CURRENT_TIMESTAMP();
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2019-08-24 15:24:47 |
+---------------------+
1 row in set (0.00 sec)

CURTIME():返回当前时间。

mysql> select CURTIME();
+-----------+
| CURTIME() |
+-----------+
| 15:25:18  |
+-----------+
1 row in set (0.00 sec)

DATE(): 从日期或日期时间表达式中提取日期值。

mysql> select DATE('2019-08-24');
+--------------------+
| DATE('2019-08-24') |
+--------------------+
| 2019-08-24         |
+--------------------+
1 row in set (0.00 sec)

DATEDIFF(d1,d2):计算日期 d1->d2 之间相隔的天数。

mysql> select DATEDIFF('2019-08-18', '2019-08-24');
+--------------------------------------+
| DATEDIFF('2019-08-18', '2019-08-24') |
+--------------------------------------+
|                                   -6 |
+--------------------------------------+
1 row in set (0.00 sec)

ADDDATE(d,date):计算起始日期 d 加上一个时间段后的日期。

mysql> select ADDDATE('2019-08-24', 1);
+--------------------------+
| ADDDATE('2019-08-24', 1) |
+--------------------------+
| 2019-08-25               |
+--------------------------+
1 row in set (0.00 sec)

DATE_FORMAT(d,f):按表达式 f的要求显示日期 d。

mysql> select DATE_FORMAT('2019-08-24 15:30:00', '%y-%m-%d');
+------------------------------------------------+
| DATE_FORMAT('2019-08-24 15:30:00', '%y-%m-%d') |
+------------------------------------------------+
| 19-08-24                                       |
+------------------------------------------------+
1 row in set (0.00 sec)

DAY(d): 返回日期值 d 的日期部分。

mysql> select DAY('2019-08-24');
+-------------------+
| DAY('2019-08-24') |
+-------------------+
|                24 |
+-------------------+
1 row in set (0.00 sec)

DAYNAME(d): 返回日期 d 是星期几。

mysql> select DAYNAME('2019-08-24');
+-----------------------+
| DAYNAME('2019-08-24') |
+-----------------------+
| Saturday              |
+-----------------------+
1 row in set (0.00 sec)

DAYOFMONTH(d): 计算日期 d 是本月的第几天。

mysql> select DAYOFMONTH('2019-08-24');
+--------------------------+
| DAYOFMONTH('2019-08-24') |
+--------------------------+
|                       24 |
+--------------------------+
1 row in set (0.00 sec)

DAYOFWEEK(d):日期 d 今天是星期几。

mysql> select DAYOFWEEK('2019-08-24');
+-------------------------+
| DAYOFWEEK('2019-08-24') |
+-------------------------+
|                       7 |
+-------------------------+
1 row in set (0.00 sec)
# 其实24号应该是周六, 而返回7代表的是周天, 因为国外是从周天开始计算

DAYOFYEAR(d):计算日期 d 是本年的第几天。

mysql> select DAYOFYEAR('2019-08-24');
+-------------------------+
| DAYOFYEAR('2019-08-24') |
+-------------------------+
|                     236 |
+-------------------------+
1 row in set (0.00 sec)

HOUR(t):返回 t 中的小时值。

mysql> select HOUR('15:57:00');
+------------------+
| HOUR('15:57:00') |
+------------------+
|               15 |
+------------------+
1 row in set (0.00 sec)

LAST_DAY(d):返回给给定日期的那一月份的最后一天。

mysql> select LAST_DAY('2019-08-24');
+------------------------+
| LAST_DAY('2019-08-24') |
+------------------------+
| 2019-08-31             |
+------------------------+
1 row in set (0.00 sec)

LOCALTIME():返回当前日期和时间。

mysql> select LOCALTIME();
+---------------------+
| LOCALTIME()         |
+---------------------+
| 2019-08-24 15:58:27 |
+---------------------+
1 row in set (0.00 sec)

LOCALTIMESTAMP():返回当前日期和时间。

mysql> select LOCALTIMESTAMP();
+---------------------+
| LOCALTIMESTAMP()    |
+---------------------+
| 2019-08-24 15:59:03 |
+---------------------+
1 row in set (0.00 sec)

MINUTE(t):返回 t 中的分钟值。

mysql> select MINUTE('16:04:01');
+--------------------+
| MINUTE('16:04:01') |
+--------------------+
|                  4 |
+--------------------+
1 row in set (0.00 sec)

MONTHNAME(d):返回日期当中的月份名称。

mysql> select MONTHNAME('2019-8-24');
+------------------------+
| MONTHNAME('2019-8-24') |
+------------------------+
| August                 |
+------------------------+
1 row in set (0.00 sec)

MONTH(d):返回日期d中的月份值,1 到 12。

mysql> select MONTH('2019-8-24');
+--------------------+
| MONTH('2019-8-24') |
+--------------------+
|                  8 |
+--------------------+
1 row in set (0.01 sec)

NOW():返回当前日期和时间。

mysql> select NOW();
+---------------------+
| NOW()               |
+---------------------+
| 2019-08-24 16:05:52 |
+---------------------+
1 row in set (0.00 sec)

QUARTER(d):返回日期d是第几季节,返回 1 到 4。

mysql> select QUARTER('2019-08-24');
+-----------------------+
| QUARTER('2019-08-24') |
+-----------------------+
|                     3 |
+-----------------------+
1 row in set (0.00 sec)

SEC_TO_TIME(s):将以秒为单位的时间 s 转换为时分秒的格式。

mysql> select SEC_TO_TIME(6666);
+-------------------+
| SEC_TO_TIME(6666) |
+-------------------+
| 01:51:06          |
+-------------------+
1 row in set (0.00 sec)

TIMEDIFF(time1, time2): 计算时间差值。

mysql> select TIMEDIFF('16:08', '16:07');
+----------------------------+
| TIMEDIFF('16:08', '16:07') |
+----------------------------+
| 00:01:00                   |
+----------------------------+
1 row in set (0.00 sec)

WEEK(d):计算日期 d 是本年的第几个星期,范围是 0 到 53。

mysql> select WEEK('2019-08-24');
+--------------------+
| WEEK('2019-08-24') |
+--------------------+
|                 33 |
+--------------------+
1 row in set (0.00 sec)

WEEKDAY(d):日期 d 是星期几(0 表示星期一,1 表示星期二)。

mysql> select WEEKDAY('2019-08-24');
+-----------------------+
| WEEKDAY('2019-08-24') |
+-----------------------+
|                     5 |
+-----------------------+
1 row in set (0.00 sec)

WEEKOFYEAR(d):计算日期 d 是本年的第几个星期,范围是 0 到 53。

mysql> select WEEKOFYEAR('2019-08-24');
+--------------------------+
| WEEKOFYEAR('2019-08-24') |
+--------------------------+
|                       34 |
+--------------------------+
1 row in set (0.00 sec)

YEAR(d):返回年份。

mysql> select YEAR('2019-08-24');
+--------------------+
| YEAR('2019-08-24') |
+--------------------+
|               2019 |
+--------------------+
1 row in set (0.00 sec)

YEARWEEK(date, mode): 返回年份及第几周(0到53),mode 中 0 表示周天,1表示周一。

mysql> select YEARWEEK('2019-08-24');
+------------------------+
| YEARWEEK('2019-08-24') |
+------------------------+
|                 201933 |
+------------------------+
1 row in set (0.00 sec)

四、高级函数:

BIN(x):返回 x 的二进制编码。

mysql> select BIN(16);
+---------+
| BIN(16) |
+---------+
| 10000   |
+---------+
1 row in set (0.00 sec)

BINARY(s):将字符串 s 转换为二进制字符串。

mysql> select BINARY('abc');
+---------------+
| BINARY('abc') |
+---------------+
| abc           |
+---------------+
1 row in set (0.00 sec)

CAST(x AS type):转换数据类型。

# 将字符串转换成日期对象
mysql> select CAST('2019-08-24' AS DATE);
+----------------------------+
| CAST('2019-08-24' AS DATE) |
+----------------------------+
| 2019-08-24                 |
+----------------------------+
1 row in set (0.00 sec)

CONNECTION_ID():返回服务器的连接数。

mysql> select CONNECTION_ID();
+-----------------+
| CONNECTION_ID() |
+-----------------+
|               2 |
+-----------------+
1 row in set (0.00 sec)

CURRENT_USER(): 返回当前用户。

mysql> select CURRENT_USER();
+----------------+
| CURRENT_USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

DATABASE():返回当前数据库名。

mysql> select DATABASE();
+------------+
| DATABASE() |
+------------+
| student    |
+------------+
1 row in set (0.00 sec)

IF(expr,v1,v2):如果表达式 expr 成立,返回结果 v1;否则,返回结果 v2。

mysql> select IF(1 > 0 ,'正确', '错误');
+---------------------------+
| IF(1 > 0 ,'正确', '错误') |
+---------------------------+
| 正确                      |
+---------------------------+
1 row in set (0.00 sec)

IFNULL(v1,v2):如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。

mysql> select IFNULL(null, 'hi');
+--------------------+
| IFNULL(null, 'hi') |
+--------------------+
| hi                 |
+--------------------+
1 row in set (0.00 sec)

ISNULL(expression):判断表达式是否为NULL。

select ISNULL('字段名');

NULLIF(expr1, expr2): 比较两个字符串,如果字符串 expr1 与 expr2 相等 返回 NULL,否则返回 expr1。

mysql> select NULLIF('abc', 'abc');
+----------------------+
| NULLIF('abc', 'abc') |
+----------------------+
| NULL                 |
+----------------------+
1 row in set (0.00 sec)

mysql> select NULLIF('abc', 'bc');
+---------------------+
| NULLIF('abc', 'bc') |
+---------------------+
| abc                 |
+---------------------+
1 row in set (0.00 sec)

USER():返回当前用户。

mysql> select USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

VERSION():返回数据库的版本号。

mysql> select VERSION();
+------------+
| VERSION()  |
+------------+
| 5.7.21-log |
+------------+
1 row in set (0.00 sec)

五、总结:

1.MySQL函数肯定会影响查询速度,建议在建表时,合理的表结构减少函数的使用

2.在查询时使用了函数,最大的坏处就是,当前使用函数的列,无法使用索引,速度将会变慢

  • 举个栗子,user表中有name跟mobile两个列,mobile加索引:

    # 将User表中手机尾号6位,全部更改为8,这时候mobile列的索引不起任何作用
    select name, mobile from user where right(mobile, 6)='888888';
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值