2014-01-30 48 views
1

名稱列包含「John Smith」,「Elsa John Sanders」,「LilJohn Thomson」,「John」等項目。 我怎樣才能構建一個查詢只是爲了返回名稱與約翰,而不是LilJohn。MySql查詢字符串上的零件

我不能做一個LIKE'%John%',因爲它會返回'LilJohn Thomson'。

回答

1

看起來這是一樣的: Search for "whole word match" in MySQL

該方法使用一個圓滑的正則表達式。

+1

這的確是一個很好的鏈接。有時似乎如果你只有一把錘子,一切都開始像釘子一樣:正則表達式很好,但相對較慢,因爲它們通常不能使用索引。如果名稱總是用空格括起來,我不認爲需要正則表達式。 – Hazzit

+0

@Hazzit正則表達式的調用相對較慢。如果名字被包含在空格中,這是一個很好的解決方案......但通常這個名字出現在值的開始或結尾。要解決這個問題,我會檢查「+ VALUE +」。 – BrettFromLA

0

假設一個字的空間限定,可以這樣做:

where concat(' ', col, ' ') like '% John %' 
0

下面的表達式應該找到所有的「約翰」 S

a = 'John' OR 
a LIKE 'John %' OR 
a LIKE '% John %' OR 
a LIKE '% John' 

請注意,其他一些技巧也行,但可能會嚴重影響性能,如

CONCAT(" ",a," ") LIKE "% John %" 
0

使用+ s嘗試類似於'%+ John +%'步速通配符。

0

您可以使用REGEXP函數。

試試這個:

SELECT * 
FROM tableA a 
WHERE a.name REGEXP '[[:<:]]John[[:>:]]'