SQL语言之正则表达式regexp的用法

本文介绍了如何在SQL查询中使用正则表达式作为筛选条件,包括基本语法、示例和应用场景,如匹配特定字符组合、字符串开头和结尾等。作者还引用了LeetCode上的问题作为实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正则表达式regexp基本可以称得上初学SQL查询语言中最没有存在感的了,它没有like那么好理解,没有数学运算符那么简单,没有 in,between and,is(not)null存在感那么强,不过偶尔casual也会突然有那么一两种场景,让你把regexp拿过来救命。

话不多说。

我的前几篇没有人看的文章中总结了查询语言的大框架,因为没有人会特意再找一遍所以我把它拿过来:

select 查询内容 from 能得到查询内容的表 where 筛选条件 group  by 分组字段 having 最终筛选条件。

首先必须声明一点,where的筛选条件必须是你所查的表里面有的,having的筛选条件,是已经得到查询结果了,想从查询结果里再进一步筛选,他们之间的筛选对象是不同的,大家别整混了。

回到今天的主题,正则表达式,正则表达式作为筛选条件,可以用在where后面,也可以用在having后面。然后就说说正则表达式的用法:

字段名 regexp 正则表达式:意思是,获取字段中满足正则表达式的行信息。正则表达式里都能写啥,代表的都是啥意思,咱们往后看:

1、字段名 regexp '^河北':获取前两个字是河北的字段信息

2、字段名 regexp'^(河北|山西)':获取前两个字是河北或山西的字段信息

3、字段名 regexp '^.{2}$':获取字段信息占两个字符的字段信息

4、字段名 regexp '合':获取包含‘合’字的字段信息

5、字段名 regexp '^[a-z]$':获取以英文小写字母开头并且只包含小写字母的字符串,注意[a-z]不是a减z,是a至z。

前面的字段名后面就都不写了

6、^:表示一个字符串或行的开头

7、[a-z]:表示一个字符范围,匹配从 a 到 z 的任何字符。

8、  [0-9]:表示一个字符范围,匹配从 0 到 9 的任何字符。

9、[a-zA-Z]:这个变量匹配从 a 到 z 或 A 到 Z 的任何字符。请注意,你可以在方括号内指定的字符范围的数量没有限制,您可以添加想要匹配的其他字符或范围。

10、 [^a-z]:这个变量匹配不在 a 到 z 范围内的任何字符。请注意,字符 ^ 用来否定字符范围,它在方括号内的含义与它的方括号外表示开始的含义不同。

11、[a-z]*:表示一个字符范围,匹配从 a 到 z 的任何字符 0 次或多次。

12、[a-z]+:表示一个字符范围,匹配从 a 到 z 的任何字符 1 次或多次。

13.:匹配任意一个字符。

14、\.:表示句点字符。请注意,反斜杠用于转义句点字符,因为句点字符在正则表达式中具有特殊含义。还要注意,在许多语言中,你需要转义反斜杠本身,因此需要使用\\.。

15、$:表示一个字符串或行的结尾。

6-15抄一下力扣,没人会介意吧。标一下出处,万一以后我火了力扣要我赔钱就不好了。。
链接:https://leetcode.cn/problems/find-users-with-valid-e-mails/solutions/2366182/cha-zhao-yong-you-you-xiao-you-xiang-de-gn7ym/

差不多就这些了
下面看个题

代码如下

# Write your MySQL query statement below
select 
*
from
Users
where
mail regexp '^[a-zA-Z][a-zA-Z0-9_.-]*\\@leetcode\\.com$';
  • ^:这个符号表示字符串的开始。
  • [a-zA-Z]:这个部分匹配任何单个字母,无论大小写。
  • [a-zA-Z0-9_.-]:这个部分匹配任何数量(包括零个)的字母,数字,下划线,点或破折号。星号表示前面的字符可以出现任意次数。
  • \@leetcode\.com:这个部分匹配"@leetcode.com"字符串。在这里,\用于转义特殊字符@和.,使它们被视为普通字符而不是正则表达式的特殊符号。
  • $:这个符号表示字符串的结束。

又水一天

### SQL正则表达式REGEXP用法与示例 在SQL中,`REGEXP` 是一种用于模式匹配的强大工具,通常用于搜索、验证或替换数据。不同数据库管理系统(DBMS)对 `REGEXP` 的支持有所不同,但其基本功能是相似的。以下是关于 `REGEXP` 的详细用法和示例。 #### 1. 基本语法 `REGEXP` 的基本语法如下: ```sql SELECT * FROM table_name WHERE column_name REGEXP 'pattern'; ``` 其中,`pattern` 是一个正则表达式,用于定义需要匹配的模式[^1]。 #### 2. 区分大小写的匹配 如果需要进行区分大小写的匹配,可以使用 `BINARY` 关键字: ```sql SELECT * FROM table_name WHERE column_name REGEXP BINARY 'pattern'; ``` 例如,查找包含以小写字母开头的单词的记录: ```sql SELECT * FROM employees WHERE name REGEXP BINARY '^[a-z]'; ``` 这将返回所有以小写字母开头的名字[^1]。 #### 3. 转义特殊字符 某些字符在正则表达式中有特殊含义,如 `.`、`*` 等。如果需要匹配这些字符本身,必须对其进行转义: ```sql SELECT * FROM table_name WHERE column_name REGEXP '\\.'; ``` 此查询将返回所有包含点号(`.`)的记录[^1]。 #### 4. 检查是否存在特定模式 可以使用 `REGEXP` 来检查列中是否包含特定模式。例如: ```sql SELECT "hello" REGEXP "[0-9]"; -- 返回 0,因为不包含数字 SELECT "hello" REGEXP "[a-z]"; -- 返回 1,因为包含小写字母 SELECT "hello" REGEXP "[A-Z]"; -- 返回 0,因为不包含大写字母 ``` 上述查询分别检查字符串 `"hello"` 是否包含数字、小写字母和大写字母[^3]。 #### 5. 提取子字符串中的数字 在某些情况下,可能需要从文本中提取数字。以下是在 MySQL 和 PostgreSQL 中的实现方式: **MySQL 示例:** ```sql SELECT REGEXP_SUBSTR(description, '[0-9]+') AS numbers FROM products; ``` **PostgreSQL 示例:** ```sql SELECT (regexp_matches(description, '[0-9]+'))[1] AS numbers FROM products; ``` 这两个查询分别从 `description` 列中提取所有数字,并将其作为结果返回[^4]。 #### 6. 处理复杂数据 正则表达式可以用于处理更复杂的模式匹配任务。例如,假设需要查找所有以字母开头并以数字结尾的字符串,可以使用以下模式: ```sql SELECT * FROM table_name WHERE column_name REGEXP '^[a-zA-Z].*[0-9]$'; ``` 此查询将返回所有以字母开头并以数字结尾的记录[^2]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值