0

考虑下表:

mysql> select * from test;
+---------+
| col     |
+---------+
| ^test$  |
| tes$()t |
| X$%[    |
| test$   |
| ^test   |
| test    |
| [       |
+---------+
7 rows in set (0.04 sec)

它包含有效和无效的模式。

如果我做 :

mysql> select * from test where 'test' regexp col;
+--------+
| col    |
+--------+
| ^test$ |
| test$  |
| ^test  |
| test   |
+--------+
4 rows in set (0.04 sec)

我得到模式匹配“测试”的所有行,而所有其他行(包括无效模式)都被忽略。

现在,如果我直接执行无效请求,则会收到模式语法错误:

mysql> select * from test where 'test' regexp '[';
ERROR 1139 (42000): Got error 'brackets ([ ]) not balanced' from regexp

有没有办法(没有另一个表)强制 MySQL 忽略这些错误(例如会给出一个空结果)?

4

2 回答 2

0
select * from test where 'test' like '[';
于 2012-10-31T11:26:38.413 回答
0

好吧,我找到了一个可行的解决方案,这很棘手,但可行:

SELECT * FROM test WHERE 'test' REGEXP RIGHT(CONCAT(col, '['), LENGTH('['));

用您的正则表达式模式替换 '['。如果您允许您的客户使用正则表达式,可能会很有用。

于 2012-10-31T11:27:24.373 回答