1. 字符串函数总览表 官网文档地址

名称 描述
ASCII() 返回最左边字符的数值
BIN() 返回包含数字的二进制表示形式的字符串
BIT_LENGTH() 返回参数的长度(以位为单位)
CHAR() 返回每个传递的整数的字符
CHAR_LENGTH() 返回参数中的字符数
CHARACTER_LENGTH() CHAR_LENGTH()的同义词
CONCAT() 返回串联的字符串
CONCAT_WS() 返回用分隔符连接
ELT() 返回索引号处的字符串
EXPORT_SET() 返回一个字符串,这样对于值位中设置的每个位,您将获得一个打开的字符串,对于每个未设置的位,您将获得一个关闭的字符串
FIELD() 后续参数中第一个参数的索引(位置)
FIND_IN_SET() 第二个参数中第一个参数的索引(位置)
FORMAT() 返回格式化为指定的小数位数的数字
FROM_BASE64() 解码base64编码的字符串并返回结果
HEX() 十进制或字符串值的十六进制表示
INSERT() 在指定位置插入子字符串,最多指定字符数
INSTR() 返回第一次出现的子串的索引
LCASE() LOWER()的同义词
LEFT() 返回指定的最左边的字符数
LENGTH() 返回字符串的长度(以字节为单位)
LIKE 简单模式匹配
LOAD_FILE() 加载命名文件
LOCATE() 返回子串第一次出现的位置
LOWER() 以小写形式返回参数
LPAD() 返回字符串参数,用指定的字符串左填充
LTRIM() 删除前导空格
MAKE_SET() 返回一组逗号分隔的字符串,这些字符串在位中具有相应的位
MATCH 执行全文搜索
MID() 返回从指定位置开始的子字符串
NOT LIKE 否定简单模式匹配
NOT REGEXP 否REGEXP
OCT() 返回包含数字的八进制表示形式的字符串
OCTET_LENGTH() LENGTH()的同义词
ORD() 返回参数最左边字符的字符代码
POSITION() LOCATE()的同义词
QUOTE() 转义要在SQL语句中使用的参数
REGEXP 字符串是否匹配正则表达式
REGEXP_INSTR() 子串匹配正则表达式的起始索引
REGEXP_LIKE() 字符串是否匹配正则表达式
REGEXP_REPLACE() 替换匹配正则表达式的子字符串
REGEXP_SUBSTR() 返回匹配正则表达式的子字符串
REPEAT() 重复字符串指定次数
REPLACE() 替换出现的指定字符串
REVERSE() 反转字符串中的字符
RIGHT() 返回指定的最右边字符
RLIKE 字符串是否匹配正则表达式
RPAD() 将字符串追加指定次数
RTRIM() 删除尾随空格
SOUNDEX() 返回soundex字符串
SOUNDS LIKE 比较声音
SPACE() 返回指定数量的字符串
STRCMP() 比较两个字符串
SUBSTR() 返回指定的子字符串
SUBSTRING() 返回指定的子字符串
SUBSTRING_INDEX() 在指定的定界符出现次数之前从字符串返回子字符串
TO_BASE64() 返回转换为以64为底的字符串的参数
TRIM() 删除前导和尾随空格
UCASE() UPPER()的同义词
UNHEX() 返回包含十六进制数字的字符串
UPPER() 转换为大写
WEIGHT_STRING() 返回字符串的权重字符串

2. 字符串比较函数和运算符

  • LIKE:假单模式匹配
    • %:匹配任意个字符
    • _:匹配单个字符
  • NOT LIKE:否定的简单模式匹配
  • STRCMP:比较两个字符串

2.1 查看字符集

  1. -- 查看mYSQl支持的字符集
  2. show charset;
  3. -- 查看MYSQL数据库服务器和数据库字符集
  4. show variables like '%character%';
  5. show variables like 'collation%';
  6. -- 查看数据库的字符集
  7. show create database employees
  8. -- 查看数据表的字符集
  9. show table status from employees like 'employees';
  10. -- 查看表中列的字符集
  11. show full columns from employees;

2.2 测试

-- [1] 同字符集下于大小写无关
SELECT 'abc' LIKE 'ABC';
-- 1
SELECT 'abc' LIKE 'Abc';
-- 1
SELECT 'abc' LIKE _utf8mb4 'ABC' COLLATE utf8mb4_0900_as_cs;
-- 0

-- [2] 支持数字
SELECT 10 LIKE '1%';
-- 1


SELECT STRCMP('text', 'text2');
-- -1
SELECT STRCMP('text2', 'text');
-- 1
SELECT STRCMP('text', 'text');
-- 0

3. 正则表达式

名称 描述
NOT REGEXP 否REGEXP
REGEXP 字符串是否匹配正则表达式
REGEXP_INSTR() 子串匹配正则表达式的起始索引
REGEXP_LIKE() 字符串是否匹配正则表达式
REGEXP_REPLACE() 替换匹配正则表达式的子字符串
REGEXP_SUBSTR() 返回匹配正则表达式的子字符串
RLIKE 字符串是否匹配正则表达式

4. 字符集和函数结果整理

ASCII()一返回字符对应的ASCII码

SELECT ASCII('a');
-- 97

SELECT ASCII('A');
-- 65

BIN()一返回数对应的二进制字符串

SELECT BIN(7);
-- '111'

BIT_LENGTH()一返回字符串的长度(单位/bit)

SELECT BIT_LENGTH('a');
-- 8  {8比特,一个字节}

SELECT BIT_LENGTH('啊');
-- 24 {3个字节}

LENGTH()一返回字符串的长度

SELECT LENGTH('localhost');
-- 9

SELECT LENGTH('向上');
-- 6

CONCAT()一返回拼接后的字符串

SELECT CONCAT('My', 'S', 'QL');
-- 'MySQL'
SELECT CONCAT('My', NULL, 'QL');
-- NULL
SELECT CONCAT(14.3);
-- '14.3'

CONCAT_WS()一带分隔符的字符串拼接

SELECT CONCAT_WS(',' ,'First name','Second name','Last Name');
-- 'First name,Second name,Last Name'
SELECT CONCAT_WS(',', 'First name',NULL,'Last Name');
-- 'First name,Last Name'

ELT()一返回字符串列表中的第N个元素

SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd');
-- 'Aa'
SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd');
-- 'Dd'

FIELD()一和ELT形成互补函数

SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
-- 2
SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff');
-- 0

FORMAT()一将数字格式化成字符串

SELECT FORMAT(12332.123456, 4);
-- '12,332.1235'
SELECT FORMAT(12332.1,4);
-- '12,332.1000'
SELECT FORMAT(12332.2,0);
-- '12,332'
SELECT FORMAT(12332.2,2,'de_DE');
-- '12.332,20'

INSERT()一字符串插入

-- INSERT(str, pos, len, newstr)
-- 参数:
    -- str: 原字符串
    -- pos:将要插入的位置
    -- len:插入的长度
    -- newstr:要被插入的字符串
-- 作用:在原字符串的一个位置插入新字符串的规定长度
-- 注意:不同于传统的字符串计算开始位置,这里从1开始。

SELECT INSERT('Quadratic', 3, 4, 'What');
-- 'QuWhattic' {满足要求,位置插入值}
SELECT INSERT('Quadratic', -1, 4, 'What');
-- 'Quadratic' {-1,这个位置不在原字符串的长度中,所以返回原字符串}
SELECT INSERT('Quadratic', 3, 100, 'What');
-- 'QuWhat' {what只有4位,所以后面位置的字符会被舍弃掉}

INSTR()一字符串搜寻,返回子串在父串中第一次出现的位置

SELECT INSTR('foobarbar', 'bar');
-- 4
SELECT INSTR('xbar', 'foobar');
-- 0

LOCATE()一位置寻找

-- LOCATE(substr,str) , LOCATE(substr,str,pos)
-- 没找到返回0 

SELECT LOCATE('bar', 'foobarbar');
-- 4
SELECT LOCATE('xbar', 'foobar');
-- 0
SELECT LOCATE('bar', 'foobarbar', 5);
-- 7

LOWER()一字符串转小写

SELECT LOWER('XS');
-- xs

-- LCASE 是 LOWER 的同义词
SELECT LCASE('XS')
-- xs

UPPER()一字符串转大写

SELECT UPPER('think');
-- THINK

-- UCASE 是 UPPER 的同义词
SELECT UCASE('think')
-- THINK

LEFT()一返回字符串从左边起的N个长度的子字符串

SELECT LEFT('foobarbar', 5);
-- 'fooba'

RIGHT()一返回字符串从右边起的N个长度的子字符串

-- RIGHT(str, len)

SELECT RIGHT('foobarbar', 4);
-- 'rbar'

LPAD()一字符串左侧开始填充

-- LPAD(str, len, padstr)

SELECT LPAD('hi',4,'??');
-- '??hi'
SELECT LPAD('hi',1,'??');
-- 'h'

RPAD()一字符串右侧开始填充

SELECT RPAD('hi',5,'?');
-- 'hi???'
SELECT RPAD('hi',1,'?');
-- 'h'

LTRIM()一返回已删除前导空格字符的字符串。

SELECT LTRIM('  barbar');
-- 'barbar'

RTRIM()一返回删除了尾部空格字符的字符串。

SELECT RTRIM('barbar  ');
-- 'barbar'

TRIM()一返回删除了前导空格和尾随空格的字符串

SELECT TRIM('  barbar  ');
-- 'barbar'

SUBSTR()一字符串截取

-- SUBSTR()是的同义词 SUBSTRING()。
-- SUBSTRING(str,pos)
-- SUBSTRING(str,pos,len)

SELECT SUBSTRING('Quadratically',5);
-- 'ratically'
SELECT SUBSTRING('foobarbar' FROM 4);
-- 'barbar'
SELECT SUBSTRING('Quadratically',5,6);
-- 'ratica'
SELECT SUBSTRING('Sakila', -3);
-- 'ila'
SELECT SUBSTRING('Sakila', -5, 3);
-- 'aki'
SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
-- 'ki'