2016-08-03 101 views
2

我有一個創建查詢的搜索函數。我的目標是搜索確切的單詞,所以如果短語是'hello',它應該只返回'hello'的結果(而不是'xhello','helloxx'等)。我的代碼如下所示:SQL正則表達式中的特殊字符 - 與特殊字符匹配字邊界

SELECT (...) WHERE x RLIKE '[[:<:]]word[[:>:]]' 

而且它適用於大多數的情況下,但是當這句話是F.E. 問題開始'$ hello'或'hello'等 - 特殊字符破壞了功能。

有沒有辦法處理它?

+0

您可以檢查這個詞的應用耳朵在字符串的開始/結尾,如果它被空格包圍:'RLIKE'(^ | [[:space:]])字([[:space:]] | $)'' –

+1

Wiktor - 不工作 – user6671488

+0

它怎麼不「工作」?請參閱https://regex101.com/r/dX5aV9/1。這是工作*。 –

回答

0

嘗試

SELECT * FROM table WHERE x RLIKE '(^|[[:space:]])Hello([[:space:]]|$)' 

SELECT * FROM table WHERE x RLIKE '(^|)Hello(|$)' 

SELECT * FROM table WHERE x REGEXP '(^|[[:space:]])Hello([[:space:]]|$)' 

SELECT * FROM test WHERE name REGEXP '(^|)Hello(|$)' 
+0

OP已經聲明那些[「不工作」](http://stackoverflow.com/questions/38739216/special-chars-in-sql-regex#comment64853436_38739216)。 –

+0

rlike和正則表達式之間的區別是什麼? – user6671488

+0

兩者都是一樣的。請參閱[正則表達式](http://dev.mysql.com/doc/refman/5.7/en/regexp.html) – zakhefron