请考虑下表:
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)我得到模式匹配为'test‘的所有行,而所有其他行(包括无效模式)都被忽略。
现在,如果我直接做一个无效的请求,我会得到一个模式语法错误:
mysql> select * from test where 'test' regexp '[';
ERROR 1139 (42000): Got error 'brackets ([ ]) not balanced' from regexp有没有办法(没有另一个表)强制MySQL忽略这些错误(例如,会给出一个空的结果)?
发布于 2012-10-31 19:27:24
好的,我找到了一个可行的解决方案,这很棘手,但这是可行的:
SELECT * FROM test WHERE 'test' REGEXP RIGHT(CONCAT(col, '['), LENGTH('['));将'[‘替换为您的regexp模式。如果您允许您的客户使用regexp,可能会很有用。
发布于 2012-10-31 19:26:38
select * from test where 'test' like '[';https://stackoverflow.com/questions/13156698
复制相似问题