如何在MariaDB SQL中取反正则表达式?

时间:2018-07-26 16:48:53

标签: sql regex mariadb

我查看了

上的文档

https://mariadb.com/kb/en/library/regular-expressions-overview/
https://mariadb.com/kb/en/library/pcre/
https://mariadb.com/kb/en/library/not-regexp/

我尝试过

... address_one not rlike '\d';
15707 rows in set (0.52 sec)

... address_one not regexp '\d';
15707 rows in set (0.56 sec)

... address_one !regexp '\d';
ERROR 1064 (42000): You have an error in your SQL syntax

... not(address_one regexp '\d');
15707 rows in set (0.55 sec)

我想找到没有 位的所有行。 ^\d将不起作用,因为该行将仅与行开头的数字匹配,而[^\d]将与诸如'a'之类的任何字母匹配。似乎并没有否定结果。

2 个答案:

答案 0 :(得分:0)

没关系。我用双反斜杠address_one not regexp '\\d'修复了它。在documentation page上甚至找不到\d

答案 1 :(得分:0)

MariaDB 10.0和Mysql 8.0具有\d(和类似的动物)。

所有(?)具有[0-9][[:digit:]]

要否定整个表达式:

x NOT RLIKE   '[0-9]'
x NOT REGEXP  '[0-9]'
NOT (x RLIKE  '[0-9]')
NOT (x REGEXP '[0-9]')

^取反正则表达式并不容易。查找没有数字的行等同于查找只有非数字的行:

x RLIKE '^[^0-9]*$'