我正在尝试选择一个基于它的字段,满足3个条件之一...我不知道该怎么做。我认为RegExp可能是我不熟悉编写它们的最好方法。
假设我有整数123,我想匹配以下情况:
123 (即123,后面没有空格或其他数字) 123-10/12/2007 00:00 (即123,加连字符和日期,或者实际上可以是连字符后的任何内容) 123_1014859 (即123,加下划线,或下划线后的任何内容)
有没有办法用MySQL做到这一点呢?
发布于 2011-06-07 10:35:44
正则表达式是合理的,但它不是性能最好的选择。最后一次比较将MySQL的正则表达式支持等同于在LIKE语句的左侧使用通配符--虽然有效,但却是所有可用选项中最慢的。
根据您的示例,您可以使用:
SELECT t.*
FROM YOUR_TABLE t
WHERE t.column LIKE '123-%'
OR t.column LIKE '123_%'另一种选择,因为OR也可能是性能问题,可以使用UNION:
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慢。
发布于 2011-06-07 10:34:28
select * from foo where bar regexp '^123-|_'(未测试)
发布于 2011-06-07 10:36:26
我会避免在SQL语句中使用正则表达式。如果我错了,有人可以纠正我,但MySQL必须使用另一个引擎来运行正则表达式。
SELECT * FROM table
WHERE field like "123"
OR field LIKE "123-%"
OR field like "123_%";https://stackoverflow.com/questions/6260091
复制相似问题