mysql8.0 正值表达式Regular expressions (sample database classicmodels _No.5)

37 阅读3分钟

mysql8.0 正值表达式Regular expressions

[ 点击:classicmodels官网下载]

[也可以去CSDN 去免费资源下载]


前言

今天看到一个网站 在正值表达式 我今天分享给大写 ,都是 和 正值表达式有关 以下是一些介绍正值表达式,

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

正则表达式是指定复杂搜索模式的有效方法。可用于正则表达式匹配的函数和运算符,并通过示例说明可用于正则表达式操作的一些特殊字符和结构。

MySQL 使用 International Components for Unicode (ICU) 实现正则表达式支持,它提供完整的 Unicode 支持并且是多字节安全的。 (在 MySQL 8.0.4 之前,MySQL 使用 Henry Spencer 的正则表达式实现,该实现以字节方式操作,并且不是多字节安全的。有关使用正则表达式的应用程序可能受到实现更改影响的方式的信息,请参阅正则表达式兼容性注意事项。)

在 MySQL 8.0.22 之前,可以在这些函数中使用二进制字符串参数,但它们会产生不一致的结果。在 MySQL 8.0.22 及更高版本中,使用任何 MySQL 正则表达式函数都会拒绝使用二进制字符串 ER_CHARACTER_SET_MISMATCH。


一、查文档

还是可以去mysql 官网查文档的 正值表达式Regular expressions

二、一些示例参考

查找包含名称 'Ford' 的产品。

SELECT * FROM Products WHERE LOWER(productName) REGEXP 'Ford';

列出以 'ship' 结尾的产品。

SELECT * FROM Products WHERE LOWER(productName0 REGEXP 'ship$';

报告在丹麦、挪威和瑞典的客户数量。

SELECT country, COUNT(*) FROM Customers
WHERE country REGEXP 'Denmark|Norway|Sweden'
GROUP BY country;'

哪些产品的产品代码在 S700_1000 到 S700_1499 的范围内?

SELECT * FROM Products WHERE productCode REGEXP 'S700_1[0-4][0-9]{2}';

哪些客户的姓名中包含数字?

SELECT * FROM Customers WHERE customerName REGEXP '[0-9]';

列出名为 Dianne 或 Diane 的员工的姓名。

SELECT * FROM Employees WHERE firstName REGEXP 'Dian';

列出产品名称中包含 'ship' 或 'boat' 的产品。

SELECT * FROM Products WHERE LOWER(productName) REGEXP 'ship|boat';

列出产品代码以 S700 开头的产品。

SELECT * FROM Products WHERE productCode REGEXP '^S700' ;

列出名为 Larry 或 Barry 的员工的姓名。

SELECT * FROM Employees WHERE firstName REGEXP '[BL]array';

列出姓名中包含非字母字符的员工的姓名。

SELECT * FROM Employees WHERE LOWER(firstName ) REGEXP '[^a-z]';

列出名称以 'Diecast' 结尾的供应商。

SELECT DISTINCT(productVendor) FROM Products WHERE LOWER(productVendor) REGEXP 'diecast$';

三、然后问题来了? 正值表达式 执行效率快吗?

在一般情况下,两个查询的执行速度可能是相似的,因为它们都是用于匹配以"S700"开头的productCode。然而,性能可能取决于多个因素,例如索引的使用、表的大小、硬件配置等。

对于这两个查询,left(productCode,4)='S700' 利用了字符串截取函数 left,而 productCode REGEXP '^S700' 使用了正则表达式。在某些情况下,正则表达式可能会导致性能损失,因为它需要更复杂的匹配过程。

为了确定哪个查询更快,可以使用 EXPLAIN 关键字来查看查询执行计划。执行计划将显示 MySQL 如何执行查询,包括是否使用了索引等信息。例如:

sqlCopy code
EXPLAIN SELECT * FROM Products WHERE productCode REGEXP '^S700';
sqlCopy code
EXPLAIN SELECT * FROM Products WHERE left(productCode,4)='S700';

通过查看执行计划,您可以了解系统如何处理这两个查询,以及是否使用了索引。在没有具体数据库结构和数据的情况下,很难准确预测哪个查询会更快。

总结

`好了,今天就说到这里,其实很多场景还是需要的正值表达式 的 如 email 验证,信用卡验证,身份证验证, 最后需要大家点赞收藏,一键3连