摘要:MySQL中的常用字符串函数介绍及实测。
MySQL的字符串函数非常丰富,几乎涵盖了能想到的各种操作,下表就是5.7版本中支持的字符串函数和操作:
| Name | Description |
|---|---|
| ASCII() | Return numeric value of left-most character |
| BIN() | Return a string containing binary representation of a number |
| BIT_LENGTH() | Return length of argument in bits |
| CHAR() | Return the character for each integer passed |
| CHAR_LENGTH() | Return number of characters in argument |
| CHARACTER_LENGTH() | Synonym for CHAR_LENGTH() |
| CONCAT() | Return concatenated string |
| CONCAT_WS() | Return concatenate with separator |
| ELT() | Return string at index number |
| EXPORT_SET() | Return a string such that for every bit set in the value bits, you get an on string and for every unset bit, you get an off string |
| FIELD() | Index (position) of first argument in subsequent arguments |
| FIND_IN_SET() | Index (position) of first argument within second argument |
| FORMAT() | Return a number formatted to specified number of decimal places |
| FROM_BASE64() | Decode base64 encoded string and return result |
| HEX() | Hexadecimal representation of decimal or string value |
| INSERT() | Insert substring at specified position up to specified number of characters |
| INSTR() | Return the index of the first occurrence of substring |
| LCASE() | Synonym for LOWER() |
| LEFT() | Return the leftmost number of characters as specified |
| LENGTH() | Return the length of a string in bytes |
| LIKE | Simple pattern matching |
| LOAD_FILE() | Load the named file |
| LOCATE() | Return the position of the first occurrence of substring |
| LOWER() | Return the argument in lowercase |
| LPAD() | Return the string argument, left-padded with the specified string |
| LTRIM() | Remove leading spaces |
| MAKE_SET() | Return a set of comma-separated strings that have the corresponding bit in bits set |
| MATCH | Perform full-text search |
| MID() | Return a substring starting from the specified position |
| NOT LIKE | Negation of simple pattern matching |
| NOT REGEXP | Negation of REGEXP |
| OCT() | Return a string containing octal representation of a number |
| OCTET_LENGTH() | Synonym for LENGTH() |
| ORD() | Return character code for leftmost character of the argument |
| POSITION() | Synonym for LOCATE() |
| QUOTE() | Escape the argument for use in an SQL statement |
| REGEXP | Whether string matches regular expression |
| REPEAT() | Repeat a string the specified number of times |
| REPLACE() | Replace occurrences of a specified string |
| REVERSE() | Reverse the characters in a string |
| RIGHT() | Return the specified rightmost number of characters |
| RLIKE | Whether string matches regular expression |
| RPAD() | Append string the specified number of times |
| RTRIM() | Remove trailing spaces |
| SOUNDEX() | Return a soundex string |
| SOUNDS LIKE | Compare sounds |
| SPACE() | Return a string of the specified number of spaces |
| STRCMP() | Compare two strings |
| SUBSTR() | Return the substring as specified |
| SUBSTRING() | Return the substring as specified |
| SUBSTRING_INDEX() | Return a substring from a string before the specified number of occurrences of the delimiter |
| TO_BASE64() | Return the argument converted to a base-64 string |
| TRIM() | Remove leading and trailing spaces |
| UCASE() | Synonym for UPPER() |
| UNHEX() | Return a string containing hex representation of a number |
| UPPER() | Convert to uppercase |
| WEIGHT_STRING() | Return the weight string for a string |
我们通过实例来研究下常用函数的用法。
- CONCAT(str1,str2,…),把传入的参数连接成为一个字符串
root@database-one 05:56: [gftest]> SELECT CONCAT('My', 'S', 'QL');
+-------------------------+
| CONCAT('My', 'S', 'QL') |
+-------------------------+
| MySQL |
+-------------------------+
1 row in set (0.01 sec)
root@database-one 05:57: [gftest]> SELECT CONCAT('My', NULL, 'QL');
+--------------------------+
| CONCAT('My', NULL, 'QL') |
+--------------------------+
| NULL |
+--------------------------+
1 row in set (0.01 sec)
root@database-one 05:57: [gftest]> SELECT CONCAT(14.3);
+--------------+
| CONCAT(14.3) |
+--------------+
| 14.3 |
+--------------+
1 row in set (0.01 sec)
上面可以看到,任何字符串与NULL连接的结构都是NULL。
- INSERT(str,pos,len,newstr),将字符串str从第pos位置开始,len长的字串替换为字符串newstr
root@database-one 06:03: [gftest]> SELECT INSERT('Quadratic', 3, 4, 'What');
+-----------------------------------+
| INSERT('Quadratic', 3, 4, 'What') |
+-----------------------------------+
| QuWhattic |
+-----------------------------------+
1 row in set (0.02 sec)
root@database-one 06:03: [gftest]> SELECT INSERT('Quadratic', -1, 4, 'What');
+------------------------------------+
| INSERT('Quadratic', -1, 4, 'What') |
+------------------------------------+
| Quadratic |
+------------------------------------+
1 row in set (0.01 sec)
root@database-one 06:03: [gftest]> SELECT INSERT('Quadratic', 3, 100, 'What');
+-------------------------------------+
| INSERT('Quadratic', 3, 100, 'What') |
+-------------------------------------+
| QuWhat |
+-------------------------------------+
1 row in set (0.01 sec)
root@database-one 06:03: [gftest]> SELECT INSERT('Quadratic', 3, 100, null);
+-----------------------------------+
| INSERT('Quadratic', 3, 100, null) |
+-----------------------------------+
| NULL |
+-----------------------------------+
1 row in set (0.01 sec)
root@database-one 06:04: [gftest]> SELECT INSERT('Quadratic', 3, null, 'What');
+--------------------------------------+
| INSERT('Quadratic', 3, null, 'What') |
+--------------------------------------+
| NULL |
+--------------------------------------+
1 row in set (0.01 sec)
上面可以看到,任何参数为NULL返回结果都是NULL。
- LOWER(str)和UPPER(str),分别把字符串转换成小写或大写
root@database-one 06:07: [gftest]> SELECT LOWER('QUADRATICALLY');
+------------------------+
| LOWER('QUADRATICALLY') |
+------------------------+
| quadratically |
+------------------------+
1 row in set (0.01 sec)
root@database-one 06:07: [gftest]> SELECT UPPER('Hej');
+--------------+
| UPPER('Hej') |
+--------------+
| HEJ |
+--------------+
1 row in set (0.02 sec)
- LEFT(str,len)和RIGHT(str,len),分别返回字符串最左边len个字符和最右边len个字符
root@database-one 06:11: [gftest]> SELECT LEFT('foobarbar', 5);
+----------------------+
| LEFT('foobarbar', 5) |
+----------------------+
| fooba |
+----------------------+
1 row in set (0.02 sec)
root@database-one 06:11: [gftest]> SELECT LEFT(null, 5);
+---------------+
| LEFT(null, 5) |
+---------------+
| NULL |
+---------------+
1 row in set (0.00 sec)
root@database-one 06:11: [gftest]> SELECT RIGHT('foobarbar', 4);
+-----------------------+
| RIGHT('foobarbar', 4) |
+-----------------------+
| rbar |
+-----------------------+
1 row in set (0.01 sec)
root@database-one 06:12: [gftest]> SELECT RIGHT('foobarbar', null);
+--------------------------+
| RIGHT('foobarbar', null) |
+--------------------------+
| NULL |
+--------------------------+
1 row in set (0.01 sec)
同样的,任何参数为NULL返回结果都是NULL。
- LPAD(str,len,padstr)和RPAD(str,len,padstr),分别用字符串padstr对str最左边和最右边进行填充,直到长度为n个字符长度
root@database-one 06:19: [gftest]> SELECT LPAD('hi',4,'**');
+-------------------+
| LPAD('hi',4,'**') |
+-------------------+
| **hi |
+-------------------+
1 row in set (0.00 sec)
root@database-one 06:20: [gftest]> SELECT LPAD('hi',1,'**');
+-------------------+
| LPAD('hi',1,'**') |
+-------------------+
| h |
+-------------------+
1 row in set (0.04 sec)
root@database-one 06:20: [gftest]> SELECT RPAD('hi',5,'*');
+------------------+
| RPAD('hi',5,'*') |
+------------------+
| hi*** |
+------------------+
1 row in set (0.01 sec)
root@database-one 06:20: [gftest]> SELECT RPAD('hi',1,'*');
+------------------+
| RPAD('hi',1,'*') |
+------------------+
| h |
+------------------+
1 row in set (0.02 sec)
上面可以看到,如果str比len长,返回值将会被截短到len长度。
- LTRIM(str)和RTRIM(str),分别去掉字符串str左侧和右侧的空格
root@database-one 06:26: [gftest]> SELECT LTRIM(' barbar');
+------------------+
| LTRIM(' barbar') |
+------------------+
| barbar |
+------------------+
1 row in set (0.02 sec)
root@database-one 06:26: [gftest]> SELECT RTRIM('barbar ');
+------------------+
| RTRIM('barbar ') |
+------------------+
| barbar |
+------------------+
1 row in set (0.01 sec)
- REPEAT(str,count),返回str重复count次的结果
root@database-one 06:30: [gftest]> SELECT REPEAT('MySQL', 3);
+--------------------+
| REPEAT('MySQL', 3) |
+--------------------+
| MySQLMySQLMySQL |
+--------------------+
1 row in set (0.00 sec)
root@database-one 06:30: [gftest]> SELECT REPEAT('MySQL', 0);
+--------------------+
| REPEAT('MySQL', 0) |
+--------------------+
| |
+--------------------+
1 row in set (0.01 sec)
root@database-one 06:31: [gftest]> SELECT REPEAT('MySQL', null);
+-----------------------+
| REPEAT('MySQL', null) |
+-----------------------+
| NULL |
+-----------------------+
1 row in set (0.00 sec)
上面可以看到,如果count小于1,将返回空字符串,任何参数为NULL返回结果都是NULL。
- REPLACE(str,from_str,to_str),用字符串to_str替换字符串str中所有的字符串from_str
root@database-one 06:36: [gftest]> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
+-------------------------------------+
| REPLACE('www.mysql.com', 'w', 'Ww') |
+-------------------------------------+
| WwWwWw.mysql.com |
+-------------------------------------+
1 row in set (0.01 sec)
- STRCMP(expr1,expr2),比较字符串expr1和expr2的ASCII码值大小
如果expr1比expr2小,返回-1;如果expr1与expr2相等,返回0;如果expr1比expr2大,返回1。
root@database-one 06:41: [gftest]> SELECT STRCMP('text', 'text2'),STRCMP('text', 'text'),STRCMP('text2', 'text');
+-------------------------+------------------------+-------------------------+
| STRCMP('text', 'text2') | STRCMP('text', 'text') | STRCMP('text2', 'text') |
+-------------------------+------------------------+-------------------------+
| -1 | 0 | 1 |
+-------------------------+------------------------+-------------------------+
1 row in set (0.00 sec)
- SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len),
SUBSTRING(str FROM pos FOR len),返回字符串str中第pos位置开始len长度的字符串
root@database-one 06:45: [gftest]> SELECT SUBSTRING('Quadratically',5);
+------------------------------+
| SUBSTRING('Quadratically',5) |
+------------------------------+
| ratically |
+------------------------------+
1 row in set (0.00 sec)
root@database-one 06:45: [gftest]> SELECT SUBSTRING('foobarbar' FROM 4);
+-------------------------------+
| SUBSTRING('foobarbar' FROM 4) |
+-------------------------------+
| barbar |
+-------------------------------+
1 row in set (0.00 sec)
root@database-one 06:45: [gftest]> SELECT SUBSTRING('Quadratically',5,6);
+--------------------------------+
| SUBSTRING('Quadratically',5,6) |
+--------------------------------+
| ratica |
+--------------------------------+
1 row in set (0.00 sec)
root@database-one 06:45: [gftest]> SELECT SUBSTRING('Sakila', -3);
+-------------------------+
| SUBSTRING('Sakila', -3) |
+-------------------------+
| ila |
+-------------------------+
1 row in set (0.00 sec)
root@database-one 06:46: [gftest]> SELECT SUBSTRING('Sakila', -5, 3);
+----------------------------+
| SUBSTRING('Sakila', -5, 3) |
+----------------------------+
| aki |
+----------------------------+
1 row in set (0.00 sec)
root@database-one 06:46: [gftest]> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
+-----------------------------------+
| SUBSTRING('Sakila' FROM -4 FOR 2) |
+-----------------------------------+
| ki |
+-----------------------------------+
1 row in set (0.00 sec)
从上面的例子可以看到,当pos为正数时,将从str的开头往后数来确定pos的位置,当pos为负数时,将从str的结尾往前数来确定pos的位置。
另外,SUBSTR() 是 SUBSTRING()的同义词。如果len小于1,将返回空字符串。任何参数为NULL返回结果都是NULL。
root@database-one 06:49: [gftest]> SELECT SUBSTR('Quadratically',5,0);
+-----------------------------+
| SUBSTR('Quadratically',5,0) |
+-----------------------------+
| |
+-----------------------------+
1 row in set (0.00 sec)
root@database-one 06:49: [gftest]> SELECT SUBSTR('Quadratically',5,null);
+--------------------------------+
| SUBSTR('Quadratically',5,null) |
+--------------------------------+
| NULL |
+--------------------------------+
1 row in set (0.01 sec)
root@database-one 06:50: [gftest]> SELECT SUBSTR('Quadratically',null,1);
+--------------------------------+
| SUBSTR('Quadratically',null,1) |
+--------------------------------+
| NULL |
+--------------------------------+
1 row in set (0.02 sec)
© 2020, morinson. 版权所有. 欢迎转载,但请保留作者及出处。