以下内容基于MySQL 5.6及更高,大部分函数5.5也基本适用,更低版本请参考对应版本手册,其内容整理自官方。
mysql常用函数被分为五类,分别为:
①String:字符串函数;
②Date and time:日期和时间;
http://blog.itpub.net/29773961/viewspace-1808967/
③Numeric:数字函数;
http://blog.itpub.net/29773961/viewspace-1813556/
④Control Flow:基于一个表达式的结果集选择不同的值(控制流函数);
http://blog.itpub.net/29773961/viewspace-1813557/
⑤Aggregate:基于一列的多个值返回单一值(聚合函数);
http://blog.itpub.net/29773961/viewspace-1813589/
【String】:
ASCII():返回ASCII码
-
mysql> SELECT ASCII('A');
-
+------------+
-
| ASCII('A') |
-
+------------+
-
| 65 |
-
+------------+
-
1 row in set (0.00 sec)
-
BIN():返回二进制值,非数字则返回0
-
mysql> SELECT BIN('HELLO'), BIN('8'), BIN(10);
-
+--------------+----------+---------+
-
| BIN('HELLO') | BIN('8') | BIN(10) |
-
+--------------+----------+---------+
-
| 0 | 1000 | 1010 |
-
+--------------+----------+---------+
-
1 row in set (0.00 sec)
BIT_LENGTH():以bit为单位来返回字符串长度
-
mysql> SELECT BIT_LENGTH('a'), BIT_LENGTH('HELLO');
-
+-----------------+---------------------+
-
| BIT_LENGTH('a') | BIT_LENGTH('HELLO') |
-
+-----------------+---------------------+
-
| 8 | 40 |
-
+-----------------+---------------------+
-
1 row in set (0.00 sec)
CHAR_LENGTH()与CHARACTER_LENGTH():返回字符串的字符数
-
mysql> SELECT CHAR_LENGTH('hello world');
-
+----------------------------+
-
| CHAR_LENGTH('hello world') |
-
+----------------------------+
-
| 11 |
-
+----------------------------+
-
1 row in set (0.00 sec)
-
CHAR():将传入的数转换成正数并返回ACSII对应的字符
-
mysql> SELECT CHAR(77,'121.9',83*1,81.3,'76');
-
+---------------------------------+
-
| CHAR(77,'121.9',83*1,81.3,'76') |
-
+---------------------------------+
-
| MySQL |
-
+---------------------------------+
-
1 row in set, 1 warning (0.00 sec)
-
-
mysql> SHOW WARNINGS;
-
+---------+------+--------------------------------------------+
-
| Level | Code | Message |
-
+---------+------+--------------------------------------------+
-
| Warning | 1292 | Truncated incorrect INTEGER value: '121.9' |
-
+---------+------+--------------------------------------------+
-
1 row in set (0.00 sec)
-
mysql> SELECT CHARSET(CHAR(0x65)), CHARSET(CHAR(0x65 USING utf8));
-
+---------------------+--------------------------------+
-
| CHARSET(CHAR(0x65)) | CHARSET(CHAR(0x65 USING utf8)) |
-
+---------------------+--------------------------------+
-
| binary | utf8 |
-
+---------------------+--------------------------------+
-
1 row in set (0.00 sec)
-
CONCAT_WS():用特定字符连接参数组成一个字符串(拼接字符串)
-
mysql> SELECT CONCAT_WS('_','hello','my','sql');
-
+-----------------------------------+
-
| CONCAT_WS('_','hello','my','sql') |
-
+-----------------------------------+
-
| hello_my_sql |
-
+-----------------------------------+
-
1 row in set (0.00 sec)
CONCAT():连接传入的参数成一个字符串(拼接字符串)
-
mysql> SELECT CONCAT('m','y','sql');
-
+-----------------------+
-
| CONCAT('m','y','sql') |
-
+-----------------------+
-
| mysql |
-
+-----------------------+
-
1 row in set (0.00 sec)
ELT():返回列表的第n个元素
-
mysql> SELECT ELT(1,'index1','index2','index3'),
-
-> ELT(3,'index1','index2','index3');
-
+-----------------------------------+-----------------------------------+
-
| ELT(1,'index1','index2','index3') | ELT(3,'index1','index2','index3') |
-
+-----------------------------------+-----------------------------------+
-
| index1 | index3 |
-
+-----------------------------------+-----------------------------------+
-
1 row in set (0.01 sec)
EXPORT_SET(bits,expr1,expr2[,'分隔符','用于补零']):按bit的排列方式,当位等于1时,插入expr1,等于0时,插入expr2,从左向右排列字符。
-
mysql> SELECT EXPORT_SET(2,'Y','N','_',5), EXPORT_SET(3,'Y','N','_',5), EXPORT_SET(4,'Y','N',',',5);
-
+-----------------------------+-----------------------------+-----------------------------+
-
| EXPORT_SET(2,'Y','N','_',5) | EXPORT_SET(3,'Y','N','_',5) | EXPORT_SET(4,'Y','N',',',5) |
-
+-----------------------------+-----------------------------+-----------------------------+
-
| N_Y_N_N_N | Y_Y_N_N_N | N,N,Y,N,N |
-
+-----------------------------+-----------------------------+-----------------------------+
-
1 row in set (0.00 sec)
FIELD(v,v1,v2....):v值去与v1,v2……匹配,匹配到后返回该值位置,若无,则返回0
-
mysql> SELECT FIELD('hey','un','hey','huh','hey'),
-
-> FIELD('bye','un','hey','huh','hey');
-
+-------------------------------------+-------------------------------------+
-
| FIELD('hey','un','hey','huh','hey') | FIELD('bye','un','hey','huh','hey') |
-
+-------------------------------------+-------------------------------------+
-
| 2 | 0 |
-
+-------------------------------------+-------------------------------------+
-
1 row in set (0.00 sec)
FIND_IN_SET():查找字符在字符串中的位置
-
mysql> SELECT FIND_IN_SET('b','a,b,c'),
-
-> FIND_IN_SET('y','a,b,c');
-
+--------------------------+--------------------------+
-
| FIND_IN_SET('b','a,b,c') | FIND_IN_SET('y','a,b,c') |
-
+--------------------------+--------------------------+
-
| 2 | 0 |
-
+--------------------------+--------------------------+
-
1 row in set (0.00 sec)
FORMAT():将数字格式化成形如#,###,###形式,可限制其小数位,若不足则补0
-
mysql> SELECT FORMAT(123456,2),
-
-> FORMAT(1234567.333,1);
-
+------------------+-----------------------+
-
| FORMAT(123456,2) | FORMAT(1234567.333,1) |
-
+------------------+-----------------------+
-
| 123,456.00 | 1,234,567.3 |
-
+------------------+-----------------------+
-
1 row in set (0.00 sec)
FROM_BASE64():base64解码
TO_BASE64():base64解码
-
mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc'));
-
+------------------+-------------------------------+
-
| TO_BASE64('abc') | FROM_BASE64(TO_BASE64('abc')) |
-
+------------------+-------------------------------+
-
| YWJj | abc |
-
+------------------+-------------------------------+
-
1 row in set (0.00 sec)
HEX():16进制编码
UNHEX():16进制解码
-
mysql> SELECT 0x616263, HEX('abc'), UNHEX(HEX('abc'));
-
+----------+------------+-------------------+
-
| 0x616263 | HEX('abc') | UNHEX(HEX('abc')) |
-
+----------+------------+-------------------+
-
| abc | 616263 | abc |
-
+----------+------------+-------------------+
-
1 row in set (0.00 sec)
INSERT():在指定位置替换字符/字符串
-
mysql> SELECT INSERT('Quadratic',3,4,'What'),
-
-> INSERT('Quadratic',-1,4,'What'),
-
-> INSERT('Quadratic',3,100,'What');
-
+--------------------------------+---------------------------------+----------------------------------+
-
| INSERT('Quadratic',3,4,'What') | INSERT('Quadratic',-1,4,'What') | INSERT('Quadratic',3,100,'What') |
-
+--------------------------------+---------------------------------+----------------------------------+
-
| QuWhattic | Quadratic | QuWhat |
-
+--------------------------------+---------------------------------+----------------------------------+
-
1 row in set (0.00 sec)
INSTR():返回字符串的位置,类似POSITION()与LOCATION()
-
mysql> SELECT INSTR('mysql','ql');
-
+---------------------+
-
| INSTR('mysql','ql') |
-
+---------------------+
-
| 4 |
-
+---------------------+
-
1 row in set (0.00 sec)
LEFT():返回字符串左侧的指定字符数的字符串
-
mysql> SELECT LEFT('mysql',2);
-
+-----------------+
-
| LEFT('mysql',2) |
-
+-----------------+
-
| my |
-
+-----------------+
-
1 row in set (0.00 sec)
LENGTH()与OCTET_LENGTH():返回字符串的字符数
-
mysql> SELECT LENGTH('mysql'), LENGTH('嗯');
-
+-----------------+--------------+
-
| LENGTH('mysql') | LENGTH('嗯') |
-
+-----------------+--------------+
-
| 5 | 3 |
-
+-----------------+--------------+
-
1 row in set (0.00 sec)
LOCATE()与POSITION():返回字符串所在的位置,类似INSTR。
-
mysql> SELECT LOCATE('ql','mysql');
-
+----------------------+
-
| LOCATE('ql','mysql') |
-
+----------------------+
-
| 4 |
-
+----------------------+
-
1 row in set (0.00 sec)
LOWER()与LCASE():返回所有字符串的小写形式
-
mysql> SELECT LOWER('MySQL');
-
+----------------+
-
| LOWER('MySQL') |
-
+----------------+
-
| mysql |
-
+----------------+
-
1 row in set (0.00 sec)
-
mysql> SELECT LCASE('MYSQL');
-
+----------------+
-
| LCASE('MYSQL') |
-
+----------------+
-
| mysql |
-
+----------------+
-
1 row in set (0.00 sec)
LPAD():返回指定长度的字符串,在左侧用指定字符填充。
-
mysql> SELECT LPAD('MySQL',10,'a');
-
+----------------------+
-
| LPAD('MySQL',10,'a') |
-
+----------------------+
-
| aaaaaMySQL |
-
+----------------------+
-
1 row in set (0.00 sec)
-
LTRIM()与RTRIM():在左侧或右侧去除空格并返回字符串,类似于TRIM()
-
mysql> SELECT LTRIM(' _mysql') a, RTRIM('mysql_ ') b;
-
+--------+--------+
-
| a | b |
-
+--------+--------+
-
| _mysql | mysql_ |
-
+--------+--------+
-
1 row in set (0.00 sec)
MAKE_SET():按bit的排列方式,当位等于1时,返回该值,等于0时,不返回,从左向右排列字符。
-
mysql> SELECT MAKE_SET(2,'a','b','c','d'),
-
-> MAKE_SET(3,'a','b','c','d'),
-
-> MAKE_SET(4,'a','b','c','d'),
-
-> MAKE_SET(5,'a','b','c','d')\G
-
*************************** 1. row ***************************
-
MAKE_SET(2,'a','b','c','d'): b
-
MAKE_SET(3,'a','b','c','d'): a,b
-
MAKE_SET(4,'a','b','c','d'): c
-
MAKE_SET(5,'a','b','c','d'): a,c
-
1 row in set (0.00 sec)
OCT():八进制编码
-
mysql> SELECT OCT(12);
-
+---------+
-
| OCT(12) |
-
+---------+
-
| 14 |
-
+---------+
-
1 row in set (0.00 sec)
ORD():返回字符串的第一个字符的ASCII码
-
mysql> SELECT ORD('a'), ORD('all'), ASCII('a');
-
+----------+------------+------------+
-
| ORD('a') | ORD('all') | ASCII('a') |
-
+----------+------------+------------+
-
| 97 | 97 | 97 |
-
+----------+------------+------------+
-
1 row in set (0.00 sec)
QUOTE():用单引号将整个字符串包裹起来,并为字符串本身的特殊字符增加转义字符
-
mysql> SELECT QUOTE('Don\'t!'),
-
-> QUOTE('\t');
-
+------------------+-------------+
-
| QUOTE('Don\'t!') | QUOTE('\t') |
-
+------------------+-------------+
-
| 'Don\'t!' | ' ' |
REPEAT():重复输出字符串
-
mysql> SELECT REPEAT('mysql',5);
-
+---------------------------+
-
| REPEAT('mysql',5) |
-
+---------------------------+
-
| mysqlmysqlmysqlmysqlmysql |
-
+---------------------------+
-
1 row in set (0.00 sec)
REPLACE():将字符串中的字符(串)替换成另一个字符(串)
-
mysql> SELECT REPLACE('','com','cn');
-
+--------------------------------------+
-
| REPLACE('','com','cn') |
-
+--------------------------------------+
-
| www.google.cn |
-
+--------------------------------------+
-
1 row in set (0.00 sec)
REVERSE():返回字符串以置返的形式(置返字符串)
-
mysql> SELECT REVERSE('123456');
-
+-------------------+
-
| REVERSE('123456') |
-
+-------------------+
-
| 654321 |
-
+-------------------+
-
1 row in set (0.00 sec)
RIGHT():返回字符串右侧的指定字符数的字符串
-
mysql> SELECT RIGHT('mysql',3);
-
+------------------+
-
| RIGHT('mysql',3) |
-
+------------------+
-
| sql |
-
+------------------+
-
1 row in set (0.00 sec)
RPAD():返回指定长度的字符串,在右侧用指定字符填充。
-
mysql> SELECT RPAD('MySQL',10,'_');
-
+----------------------+
-
| RPAD('MySQL',10,'_') |
-
+----------------------+
-
| MySQL_____ |
-
+----------------------+
-
1 row in set (0.00 sec)
SOUNDEX():返回soundex字符串(标准的为4字符),但是该函数可能返回一个稍长一点的字符串,利用字符的读音近似值所得。
目前是一个有限制的函数,只能用于英语,其他语言会产生无法预期的结果,官方表示将在未来版本(5.6以后)移除这些限制,可以在官方查找BUG #22638来获得更多信息。
-
mysql> SELECT SOUNDEX('HELLO'), SOUNDEX('Quadratically');
-
+------------------+--------------------------+
-
| SOUNDEX('HELLO') | SOUNDEX('Quadratically') |
-
+------------------+--------------------------+
-
| H400 | Q36324 |
-
+------------------+--------------------------+
-
1 row in set (0.00 sec)
SPACE():返回N个空格
-
mysql> SELECT SPACE(10) a, LENGTH(SPACE(10));
-
+------------+-------------------+
-
| a | LENGTH(SPACE(10)) |
-
+------------+-------------------+
-
| | 10 |
-
+------------+-------------------+
-
1 row in set (0.00 sec)
STRCMP():返回字符串的比较结果,0=same,-1=smaller,1=other(结果说明不分大小写)
-
mysql> SELECT STRCMP('mysql','MYSQL'), STRCMP('mysql','mysql'), STRCMP('mysql','oracle'), STRCMP('oracle','mysql')\G
-
*************************** 1. row ***************************
-
STRCMP('mysql','MYSQL'): 0
-
STRCMP('mysql','mysql'): 0
-
STRCMP('mysql','oracle'): -1
-
STRCMP('oracle','mysql'): 1
-
1 row in set (0.00 sec)
SUBSTRING()与MID()与SUBSTR()::返回从指定位置开始的字符串
-
mysql> SELECT SUBSTRING(123456,3); -- 可以用于数字
-
+-----------------------+
-
| SUBSTRING(123456,'3') |
-
+-----------------------+
-
| 3456 |
-
+-----------------------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT SUBSTRING('ABCDEFG',3); -- 可以用于字符串
-
+--------------------------+
-
| SUBSTRING('ABCDEFG','3') |
-
+--------------------------+
-
| CDEFG |
-
+--------------------------+
-
1 row in set (0.00 sec)
-
mysql> SELECT SUBSTRING('ABCDEFG',3,2); -- 也可以指定返回几个,比如从3号位置开始返回,返回2个字符
-
+--------------------------+
-
| SUBSTRING('ABCDEFG',3,2) |
-
+--------------------------+
-
| CD |
-
+--------------------------+
-
1 row in set (0.00 sec)
SUBSTRING_INDEX():返回字符串的部分,基于指定分隔符。(如果是正数就从左往右开始搜索,反之亦然)
-
mysql> SELECT SUBSTRING_INDEX('abc@email.com','@',2); -- 以@为分隔符,返回第二个整部分的字符串
-
+----------------------------------------+
-
| SUBSTRING_INDEX('abc@email.com','@',2) |
-
+----------------------------------------+
-
| abc@email.com |
-
+----------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT SUBSTRING_INDEX('abc@email.com','@',1); -- 以@为分隔符,返回第一部分的字符串
-
+----------------------------------------+
-
| SUBSTRING_INDEX('abc@email.com','@',1) |
-
+----------------------------------------+
-
| abc |
-
+----------------------------------------+
-
1 row in set (0.00 sec)
-
mysql> SELECT SUBSTRING_INDEX('','.',1); -- 以.为分隔符,返回.之前的第一部分字符串
-
+----------------------------------------+
-
| SUBSTRING_INDEX('','.',1) |
-
+----------------------------------------+
-
| www |
-
+----------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT SUBSTRING_INDEX('','.',-1); -- 以.为分隔符,从右往左开始,返回.之前的第一部分字符串
-
+-----------------------------------------+
-
| SUBSTRING_INDEX('','.',-1) |
-
+-----------------------------------------+
-
| com |
-
+-----------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT SUBSTRING_INDEX('','.',-2); -- 以.为分隔符,从右往左开始,返回.之前的第二个整部分字符串
-
+-----------------------------------------+
-
| SUBSTRING_INDEX('','.',-2) |
-
+-----------------------------------------+
-
| mysql.com |
-
+-----------------------------------------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT SUBSTRING_INDEX('','.',-3); -- 以.为分隔符,从右往左开始,返回.之前的第三个整部分字符串
-
+-----------------------------------------+
-
| SUBSTRING_INDEX('','.',-3) |
-
+-----------------------------------------+
-
| www.mysql.com |
-
+-----------------------------------------+
-
1 row in set (0.00 sec)
TRIM():移除字符串的空格或指定字符
-
mysql> SELECT TRIM(' mysql ') as A; -- 默认移除空格
-
+-------+
-
| A |
-
+-------+
-
| mysql |
-
+-------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT TRIM(TRAILING 'asd' FROM 'mysqlasdasd') as A; -- TRAILING用来移除字符串末尾的指定字符
-
+-------+
-
| A |
-
+-------+
-
| mysql |
-
+-------+
-
1 row in set (0.00 sec)
-
-
mysql> SELECT TRIM(LEADING 'asd' FROM 'asdmysql') as A; -- LEADING用来移除字符串开始的指定字符
-
+-------+
-
| A |
-
+-------+
-
| mysql |
-
+-------+
-
1 row in set (0.00 sec)
-
UPPER()与UCASE():返回所有字符串的大写形式
-
mysql> SELECT UPPER('MySQL');
-
+----------------+
-
| UPPER('MySQL') |
-
+----------------+
-
| MYSQL |
-
+----------------+
-
1 row in set (0.00 sec)
WEIGHT_STRING():返回一个weight_string值
常用于测试或调试collation。
作者公众号(持续更新)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-1813545/
,如需转载,请注明出处,否则将追究法律责任。