名稱列包含「John Smith」,「Elsa John Sanders」,「LilJohn Thomson」,「John」等項目。 我怎樣才能構建一個查詢只是爲了返回名稱與約翰,而不是LilJohn。MySql查詢字符串上的零件
我不能做一個LIKE'%John%',因爲它會返回'LilJohn Thomson'。
名稱列包含「John Smith」,「Elsa John Sanders」,「LilJohn Thomson」,「John」等項目。 我怎樣才能構建一個查詢只是爲了返回名稱與約翰,而不是LilJohn。MySql查詢字符串上的零件
我不能做一個LIKE'%John%',因爲它會返回'LilJohn Thomson'。
看起來這是一樣的: Search for "whole word match" in MySQL
該方法使用一個圓滑的正則表達式。
假設一個字的空間限定,可以這樣做:
where concat(' ', col, ' ') like '% John %'
下面的表達式應該找到所有的「約翰」 S
a = 'John' OR
a LIKE 'John %' OR
a LIKE '% John %' OR
a LIKE '% John'
請注意,其他一些技巧也行,但可能會嚴重影響性能,如
CONCAT(" ",a," ") LIKE "% John %"
使用+ s嘗試類似於'%+ John +%'步速通配符。
這的確是一個很好的鏈接。有時似乎如果你只有一把錘子,一切都開始像釘子一樣:正則表達式很好,但相對較慢,因爲它們通常不能使用索引。如果名稱總是用空格括起來,我不認爲需要正則表達式。 – Hazzit
@Hazzit正則表達式的調用相對較慢。如果名字被包含在空格中,這是一個很好的解決方案......但通常這個名字出現在值的開始或結尾。要解決這個問題,我會檢查「+ VALUE +」。 – BrettFromLA