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 次方。
# 2的3次方
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';