正则表达式中的MySQL和字边界

时间:2012-05-31 03:38:56

标签: mysql sql regex

如何在MySQL查询中使用正则表达式字边界?

例如,我想匹配“产品”或“简报”,

它适用于OR

IF(? = 'product' OR ? = 'newsletter', ... , ...)

但正则表达式怎么样?我想它会是这样的吗?

IF(? REGEXP '^('product'||'newsletter')+$', ..., ... ) 

2 个答案:

答案 0 :(得分:4)

SELECT *
FROM tbl
WHERE description REGEXP '[[:<:]]red[[:>:]]|[[:<:]]blue[[:>:]]'

或作为选择表达式:

SELECT IF(description REGEXP '[[:<:]]red[[:>:]]|[[:<:]]blue[[:>:]]', 1, 0) AS is_matched, tbl.*
FROM description

您可以使用RLIKE作为同义词,但REGEXP似乎更受欢迎 [citation needed]

区分大小写

来自MySQL manual for REGEXP

REGEXP不区分大小写,除非与二进制字符串一起使用。

mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
        -> 1  0

答案 1 :(得分:1)

使用REGEXPRLIKE

Regular expressions in MySQL

在您的情况下,您可以使用MyISAM存储引擎进行MATCH() ... AGAINST全文搜索。

或者您可以使用IN()作为@Wiseguy提到