2017-06-19 70 views
1

我正在对邮政编码/邮政编码字段进行查询。
我已经做了一些研究和负向前看符号的不支持:MYSQL正则表达式否定式替代方案

“MySQL支持POSIX正则表达式,而不是PCRE”

是否有其他解决以下,使用MYSQL支持的正则表达式?

(?i)^W(?!C) - 这是PHP

解决方案和示例数据库查询

select postcode from `postcodes` WHERE LOWER(postcode) REGEXP '^W(?!C)' 
+1

你想以 'W' 开始邮政编码,其次是比 'C' 以外的东西? – Samadi

+1

MariaDB 10.0处理PCRE。 –

回答

3

在MySQL中,你可以使用

WHERE postcode REGEXP '^W([^C]|$)' 

([^C]|$)匹配任何字符,但C或字符串的结尾。另外,不需要使用TOLOWER,因为默认情况下,正则表达式搜索不区分大小写。

online tests

SELECT 'wc' REGEXP '^W([^C]|$)'; // => 0 
SELECT 'wR' REGEXP '^W([^C]|$)'; // => 1 
SELECT 'w' REGEXP '^W([^C]|$)'; // => 1