[英]Mysql REGEXP exact same string
我正在嘗試使用完全相同的字符串獲取所有這些結果,但是下面的查詢返回的結果與所有具有Cars的字符串匹配,但我只需要與Cars完全匹配的結果
SELECT i.name
FROM table_name i
WHERE i.name REGEXP '[[:<:]]Cars[[:>:]]'
我以為[[:<:]] [[:>:]]會將結果限制為僅具有精確值
編輯:
我沒有提到我的不好,上面只是一個例子,不僅僅是汽車,還會有多個字符串,例如
SELECT i.name
FROM table_name i
WHERE i.name REGEXP '[[:<:]]Cars[[:>:]].[[:<:]]Movies[[:>:]].[[:<:]]Camping[[:>:]]''
將根據條件匹配多個字符串。 我正在嘗試Regexp,因為否則我將必須為所有字符串顯式聲明LIKE,而無需%。
我使用REGEXP的唯一原因是因為我可以通過串聯一次傳遞我的字符串,就我所知,使用LIKE是不可能的
My table
**ColumnName**
Cars
Racing Cars
Movies
Romantic Movies
通過使用上面的查詢,我可以獲得與汽車和電影有關的所有結果,相反,我只需要完全匹配
僅限汽車和電影
當您需要完全匹配時,為什么要使用正則表達式。 只需嘗試一下
SELECT i.name
FROM table_name i
WHERE i.name = 'CARS'
要么
SELECT i.name
FROM table_name i
WHERE i.name like '%CARS%'
根據您的字符串和樣式刪除左或右百搭字符%
編輯:-
因此,根據您的修改,如果只想匹配汽車和電影,則可以這樣編寫:
SELECT i.name
FROM table_name i
WHERE i.name IN ('CARS','MOVIES')
@Deepanshu,我看到您使用了REGEXP,也許是因為您的實現限制了您將REGEXP表達式中使用的整個字符串作為參數提供給函數的方式。 [[:<:]]
和[[:>:]]
匹配某個匹配單詞的開頭和結尾,而不匹配整個字符串。 因此,您要分別使用^
和$
,將使用的確切查詢是:
SELECT i.name
FROM table_name i
WHERE i.name REGEXP '(^Cars$)|(^Movies$)|(^Camping$)'
但是,由於我注意到很多人一直在使用mySQL REGEXP進行直接相等比較,所以這不是一個好習慣,因此我建議更改您的實現,使其使用LIKE
,equality或類似的東西。 您還可以使用編程語言動態生成LIKE語句。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.