2017-06-19 31 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