MySQL中有一個強(qiáng)大的正則表達(dá)式匹配函數(shù)regexp,可以幫助我們方便地對數(shù)據(jù)進(jìn)行模糊匹配,不過有時候我們需要用到的是“非”,也就是說我們需要匹配不滿足某個正則表達(dá)式的數(shù)據(jù)。那么該如何使用MySQL的regexp來實(shí)現(xiàn)這個功能呢?下面我們就來學(xué)習(xí)一下。
SELECT * FROM table_name WHERE column_name NOT REGEXP 'expression';
以上是MySQL中使用正則表達(dá)式“非”的方法。可以看到,我們只需要在regexp之前加上NOT關(guān)鍵字,就可以實(shí)現(xiàn)不符合正則表達(dá)式的匹配。
下面我們來看一下具體的實(shí)例:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; INSERT INTO `user` (`name`) VALUES ('Tom1'),('Tom2'),('Jerry1'),('Jerry2'),('Linda1'),('Linda2');
現(xiàn)在我們需要查詢所有不以數(shù)字結(jié)尾的名字,可以使用以下代碼來實(shí)現(xiàn):
SELECT * FROM user WHERE name NOT REGEXP '[0-9]$';
以上代碼中,$表示匹配結(jié)尾,[0-9]表示匹配數(shù)字,所以[0-9]$表示以數(shù)字結(jié)尾的字符串。
通過以上代碼,我們可以得出結(jié)果為:
+----+-------+ | id | name | +----+-------+ | 1 | Tom1 | | 2 | Tom2 | | 5 | Linda1| | 6 | Linda2| +----+-------+
我們可以看到,只有四條記錄不以數(shù)字結(jié)尾,符合我們的要求。
通過以上例子,我們可以看到使用MySQL的regexp函數(shù)來實(shí)現(xiàn)“非”匹配也是非常方便的。可以幫助我們快速篩選出不符合規(guī)則的數(shù)據(jù)。