首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于MySQL查询的正则表达式

问用于MySQL查询的正则表达式
EN

Stack Overflow用户
提问于 2011-06-07 10:30:49
回答 3查看 515关注 0票数 1

我正在尝试选择一个基于它的字段,满足3个条件之一...我不知道该怎么做。我认为RegExp可能是我不熟悉编写它们的最好方法。

假设我有整数123,我想匹配以下情况:

123 (即123,后面没有空格或其他数字) 123-10/12/2007 00:00 (即123,加连字符和日期,或者实际上可以是连字符后的任何内容) 123_1014859 (即123,加下划线,或下划线后的任何内容)

有没有办法用MySQL做到这一点呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-07 10:35:44

正则表达式是合理的,但它不是性能最好的选择。最后一次比较将MySQL的正则表达式支持等同于在LIKE语句的左侧使用通配符--虽然有效,但却是所有可用选项中最慢的。

根据您的示例,您可以使用:

代码语言:javascript
复制
SELECT t.*
  FROM YOUR_TABLE t
 WHERE t.column LIKE '123-%'
    OR t.column LIKE '123_%'

另一种选择,因为OR也可能是性能问题,可以使用UNION:

代码语言:javascript
复制
SELECT a.*
  FROM YOUR_TABLE a
 WHERE a.column LIKE '123-%'
UNION ALL
SELECT b.*
  FROM YOUR_TABLE b
 WHERE b.column LIKE '123_%'

UNION ALL将从两个表中返回所有结果;UNION删除重复项,并且在这一点上比UNION ALL慢。

票数 2
EN

Stack Overflow用户

发布于 2011-06-07 10:34:28

代码语言:javascript
复制
select * from foo where bar regexp '^123-|_'

(未测试)

票数 1
EN

Stack Overflow用户

发布于 2011-06-07 10:36:26

我会避免在SQL语句中使用正则表达式。如果我错了,有人可以纠正我,但MySQL必须使用另一个引擎来运行正则表达式。

代码语言:javascript
复制
SELECT * FROM table 
  WHERE field like "123" 
    OR field LIKE "123-%" 
    OR field like "123_%";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6260091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档