sql语句 怎么用 正则表达式 查询 一个 符合 “-” 加数字 的字短? 如查出 字段 “-23", 而 “-23-”

直接上结论:
MySQL SQL查询字段匹配“-”后跟一个数字:

-blike '[0-9 ]':匹配“-”后跟一个数字。

-blike '[0-9 ][0-9 ]':匹配“-”后跟两个数字。

-blike '[0-9 ]%[0-9 ]':匹配“-”后跟三位或更多数字。

结合使用这些条件来过滤特定格式的记录。
请记住更改数据库系统属性。

数据库笔记-SQL过滤(LIKE&正则表达式)

巴利拉提...巴利巴利和巴利巴。
参见《3 2 》《3 》《2 》《3 1 》《2 1 》。
简单吧?
“.” ”-”、”、”、”、”、”。
MySQL 的最新版本。
请参阅“\”、“\”。
这就够了。

请参阅“\\”,请参阅“\\”。
这不是很烦人吗? ?
还有一个“?”和"" 和"+"、 和 、 和 和 。
“?”请查看“”“查看”“+”“查看”。
“{n}”表示正好n,“{n,}”表示至少n,“{n,m}”表示n到m,而m只有2 5 5 这一切都是一团糟。

“^” ه ه ه هר 和“$” ه ه ه هר。
亲爱的,我的,我的,我的,我的,我的,我的,我的。
”这是非常合适的。

关于我们的问题,我们的问题。

SQL 常用正则表达式

sql如何使用regexp进行正则表达式查询 sqlregexp正则查询的基础教程

唉……这个REGEXP的东西……真是让人头疼。
2 02 2 年我还在使用这个,在一个叫上海的城市做一个项目。
当时的数据量非常大,有多少呢?数百或数千万。
至于钱……项目资金紧缺,花了多少钱?几万块钱,都花光了。

当时我很困惑,所以我首先输入 SELECT FROM users WHERE REGEXP username '^a',试图找到用户名以 a 开头的用户。
结果,跑步速度非常慢。
后来我才知道,这个东西不能盲目使用。
那。
匹配每个单个字符并匹配前一个字符零次或多次。
如果这些符号使用过多,性能会直接下降。

后来我开始想,也许我太极端了,我认为REGEXP太占主导地位了。
只是考虑优化一下。
例如,在可索引列上使用 REGEXP 可以减少扫描的行数。
使用 SELECT FROM user WHERE id REGEXP '1 00' 作为索引列 id。
虽然REGEXP没有充分利用索引,但至少可以更快。
这个技巧非常有效。

接下来是正则表达式简化。
一开始想匹配包含gmail.com的邮箱,直接写SELECT email FROM users WHERE email REGEXP 'gmail.com',结果不行。
我必须转义点并输入 SELECT email FROM users WHERE email REGEXP '\.gmail\.com'。
后来我意识到MySQL支持{n,m}分位数,于是我将其重写为SELECT username FROM users WHERE username REGEXP '^.{5 ,1 0}$',匹配长度为5 到1 0的用户名。
这样效率更高。

锚点 ^ 和 $ 也很重要。
例如,^a 直接匹配行首,而不扫描整个字符串。
我经常使用它,尤其是在进行日志分析时。
以前有一个项目,是在杭州做的。
我分析了.log条目,发现有很多ERROR:。
在其中。
我刚刚使用了 SELECT FROM log WHERE REGEXP message 'ERROR:'。
而且跑得很快。

但是最麻烦的是REGEXP不能循环执行。
我记得有一次,当我编写一个存储过程并每次通过循环调用 REGEXP 时,存储过程都会挂起。
后来我改成在应用层处理,用Python进行匹配,速度快多了。
花了多少钱?仅添加几行代码就可能花费数百美元。

接下来是全文索引。
MySQL 和 PostgreSQL 都支持 MATCH(column) AGAINST('keyword'),用于文本搜索场景。
当时我们在成都有一个项目。
在搜索新闻稿的时候,我们就用了这个,效果还不错。

数据库特定功能也很有用。
MySQL有REGEXP_INSTR和REGEXP_REPLACE,PostgreSQL有~、~、regexp_matches()。
这些功能可以节省大量工作。
例如,SELECT REGEXP_REPLACE(email, '\.gmail\.com', '@example.com') FROM user 直接将邮箱中的 gmail.com 替换为 example.com。

预编译的正则表达式也可用。
Oracle支持这一点,可以减少重复分析的成本。
但是我们当时用的是MySQL,所以就没有使用。

这也是e分析问题计划很重要。
使用EXPLAIN检查执行计划,看是否是全表扫描或者索引无效。
在武汉的一个项目中,我发现EXPLAIN显示的是全表扫描。
经过检查,原来是REGEXP写错了,结果是全表扫描。
我花了一下午才把它修好。

最后一件事是限制结果集的大小。
使用 LIMIT 减少传输的数据量。
例如,SELECT FROM 记录 WHERE message REGEXP 'error' LIMIT 1 00 仅采用前 1 00 个条目,以避免遍历整个结果集。

总体来说REGEXP是强大的,但是用不好也很麻烦。
到了2 02 2 年,我仍然觉得它相当难用,尤其是在性能方面。
后来慢慢探索就好了。
但现在看来数据清洗、日志分析、网络安全等场景还是依赖它。
也许我有偏见,认为它太复杂了,但它确实有效。
就这样吧。