MySQL篇(高级字符串函数/正则表达式)(持续更新迭代)

目录

讲点一:高级字符串函数

一、简介

二、常见字符串函数

[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. 图解 ![](https://img-home.csdnimg.cn/images/20230724024159.png) ## 三、示例 ### 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';

相关推荐
靠近彗星16 分钟前
基于 Vue + Django + MySQL 实现个人博客/CMS系统
前端·vue.js·python·mysql·django
学吧别真挂了1 小时前
正则表达式从入门到飞升:覆盖90%前端场景的秘籍
前端·javascript·正则表达式
兰亭序咖啡1 小时前
学透Spring Boot — 007. 加载外部配置
android·java·spring boot
男Ren、麦根1 小时前
MySQL 复制与主从架构(Master-Slave)
数据库·mysql·架构
8931519601 小时前
Android穿山甲banner广告穿插到项目的banner中
android·android开发·android教程·穿山甲banner广告加入项目
Stuild Stuil2 小时前
Mysql 字段值批量自增或自减(坐标系数据,(x,y))
java·javascript·mysql
利明的博客2 小时前
mediacodec服务启动时加载media_codecs.xml
android·xml·java
morganmin3 小时前
(一)MySQL常见疑惑之:select count(*)和select count(1)的区别
数据库·mysql
zhangjin12223 小时前
kettle从入门到精通 第九十四课 ETL之kettle MySQL Bulk Loader大批量高性能数据写入
大数据·数据仓库·mysql·etl·kettle实战·kettlel批量插入·kettle mysql
深圳厨神3 小时前
mysql对表,数据,索引的操作sql
数据库·sql·mysql