目录
[1. CONCAT()](#1. CONCAT())
[2. SUBSTRING()](#2. SUBSTRING())
[3. LENGTH()](#3. LENGTH())
[4. REPLACE()](#4. REPLACE())
[5. TRIM()](#5. TRIM())
[6. UPPER()](#6. UPPER())
[7. LOWER()](#7. LOWER())
[8. LEFT()](#8. LEFT())
[9. RIGHT()](#9. RIGHT())
[10. INSTR()](#10. INSTR())
[11. LENTH(str)](#11. LENTH(str))
[1. 字符类](#1. 字符类)
[2. 重复次数](#2. 重复次数)
[3. 通配符](#3. 通配符)
[4. 选择符](#4. 选择符)
[5. 分组](#5. 分组)
[6. 特殊字符](#6. 特殊字符)
[7. 任意数量](#7. 任意数量)
[8. 图解](#8. 图解)
[1. 匹配单个字符](#1. 匹配单个字符)
[2. 匹配多个字符](#2. 匹配多个字符)
[3. 匹配重复次数](#3. 匹配重复次数)
[4. 匹配位置](#4. 匹配位置)
[5. 匹配特定字符串](#5. 匹配特定字符串)
[6. 匹配位数限制](#6. 匹配位数限制)
[7. 匹配单词](#7. 匹配单词)
讲点一:高级字符串函数
一、简介
MySQL中内置了很多字符串函数,常用的几个如下:
注意:以下只列举了常用函数,其余查看官方文档
官方文档:MySQL :: MySQL 8.0 参考手册 :: 12.8 字符串函数和运算符
二、常见字符串函数
1. CONCAT()
CONCAT()函数用于连接两个或多个字符串。它接受两个或多个参数,返回它们连接后的字符串。
SELECT CONCAT('Hello',' ','World') AS result;
-- Output: Hello World
2. SUBSTRING()
SUBSTRING()函数可以从一个字符串中截取一段子字符串。
它可以接受三个参数,第一个参数为原始字符串,
第二个参数为要截取的子字符串的起始位置,
第三个参数为要截取的子字符串的长度。
SELECT SUBSTRING('Hello World', 7, 5) AS result;
-- Output: World
3. LENGTH()
LENGTH()函数返回一个字符串的长度。
SELECT LENGTH('Hello World') AS result;
-- Output: 11
4. REPLACE()
REPLACE()函数用于将一个字符串中的部分子字符串替换成另一个字符串。
它可以接受三个参数,第一个参数为原始字符串,第二个参数为要替换的子字符串,第三个参数为替换成的字符串。
SELECT REPLACE('Hello World','World','MySQL') AS result;
-- Output: Hello MySQL
5. TRIM()
TRIM()函数用于从字符串的两端去除空格。它可以接受一个参数,表示要处理的原始字符串。
SELECT TRIM(' Hello World ') AS result;
-- Output: Hello World
6. UPPER()
UPPER()函数将一个字符串转换为大写字母。
SELECT UPPER('hello world') AS result;
-- Output: HELLO WORLD
7. LOWER()
LOWER()函数将一个字符串转换为小写字母。
SELECT LOWER('HELLO WORLD') AS result;
-- Output: hello world
8. LEFT()
LEFT()函数可以从一个字符串的左端截取一段子字符串。它可以接受两个参数,
第一个参数为原始字符串,
第二个参数为要截取的子字符串的长度。
SELECT LEFT('Hello World', 5) AS result;
-- Output: Hello
9. RIGHT()
RIGHT()函数可以从一个字符串的右端截取一段子字符串。它可以接受两个参数,
第一个参数为原始字符串,
第二个参数为要截取的子字符串的长度。
SELECT RIGHT('Hello World', 5) AS result;
-- Output: World
10. INSTR()
INSTR()函数可以用于查找一个字符串在另一个字符串中出现的位置。
它可以接受两个参数,第一个参数为要查找的字符串,第二个参数为要查找的原始字符串。
SELECT INSTR('Hello World', 'World') AS result;
-- Output: 7
11. LENTH(str)
返回字符串 str 的长度,以字节为单位。一个多字节 字符计数为多个字节。
这意味着对于 包含五个 2 字节字符的字符串,LENGTH() 返回 ,而 CHAR_LENGTH() 返回 。
mysql> SELECT LENGTH('text');
-> 4
讲点二:正则表达式
一、简介
MYSQL中的正则表达式,主要用于对文本串进行条件筛选的操作,
比如筛选出串中某些带指定数字、符号、子串的部分。
二、语法
1. 字符类
用方括号表示一组字符,例如[A-Z]表示所有大写字母,[a-z]表示所有小写字母,[0-9]表示所有数字,
[^a-z]表示除小写字母之外的所有字符。
2. 重复次数
用花括号表示重复次数,例如a{3}表示a重复3次,a{2,}表示a至少重复2次,a{2,5}表示a重复2到5次。
3. 通配符
用句点表示任意字符,例如a.b表示以a开头,以b结尾,中间任意一个字符的字符串。
4. 选择符
用竖线表示或,例如a|b表示a或b。
5. 分组
用括号表示一组,例如(a|b)c表示ac或bc。
6. 特殊字符
正则表达式中还有一些特殊字符,例如转义字符\、行首符^、行尾符$等。
7. 任意数量
*
是一个限定符,用来修饰前一个字符或分组,限定匹配重复的数量为任意数量。
例如:
正则表达式 a* 可以匹配 a aa aaa aaaa aaaaaaa等等
正则表达式 (ab)* 可以匹配 ab abababab ababababababab等等
需要注意个是,*与+不同,+要求重复数量至少为1,*则可以为0,所以字符串为空也是可以匹配的。
以下是常用的限定符代码:
*
重复零次或更多次+
重复一次或更多次?
重复零次或一次{n}
重复n次{n,}
重复n次或更多次{n,m}
重复n到m次
8. 图解
三、示例
1. 匹配单个字符
使用点号 . 可以匹配任意一个字符:
SELECT * FROM users WHERE name REGEXP 'm.n';
2. 匹配多个字符
使用方括号 [] 可以匹配一组字符:
SELECT * FROM users WHERE name REGEXP '[aeiou]';
3. 匹配重复次数
使用花括号 {} 可以匹配一定数量的字符:
SELECT * FROM users WHERE name REGEXP 'm{2,3}';
4. 匹配位置
使用脱字符 ^ 和美元符号 $ 可以匹配字符串的开头和结尾:
SELECT * FROM users WHERE name REGEXP '^m';
5. 匹配特定字符串
使用竖线 | 可以匹配多个字符串中的一个:
SELECT * FROM users WHERE name REGEXP 'john|mary|bob';
6. 匹配位数限制
使用星号 *,加号 + 和问号 ? 可以匹配一定位数的字符:
SELECT * FROM users WHERE name REGEXP '.{4,6}';
7. 匹配单词
使用圆括号 () 可以匹配整个单词:
SELECT * FROM users WHERE name REGEXP '(john|mary) smith';