在MySQL中搜索"全字匹配"

Odd*_*ing 71 mysql sql full-text-search

我想写一个SQL查询,在文本字段中搜索关键字,但只有当它是"全字匹配"时(例如,当我搜索"rid"时,它不应该匹配"arid",但它应该匹配"一个摆脱".

我正在使用MySQL.

幸运的是,性能在这个应用程序中并不重要,数据库大小和字符串大小都很小,但我更喜欢在SQL中而不是在PHP中驱动它.

Luk*_*keH 145

您可以使用REGEXP[[:<:]][[:>:]]字边界标记:

SELECT *
FROM table 
WHERE keywords REGEXP '[[:<:]]rid[[:>:]]'
Run Code Online (Sandbox Code Playgroud)

  • 只需注意,必须转义使用正则表达式特殊字符的字符串. (2认同)
  • 只是在mysql查询中使用php变量的注释:''[[:::]]“。$ rid。” [[:&gt;:]]'` (2认同)

Ric*_*yce 29

找到一个答案来防止经典单词边界[[::<::]]与特殊字符冲突,例如.@#$%^&*

更换..

SELECT *
FROM table 
WHERE keywords REGEXP '[[:<:]]rid[[:>:]]'
Run Code Online (Sandbox Code Playgroud)

有了这个..

SELECT *
FROM table 
WHERE keywords REGEXP '([[:blank:][:punct:]]|^)rid([[:blank:][:punct:]]|$)'
Run Code Online (Sandbox Code Playgroud)

后者匹配(空格,制表符等)|| (逗号,括号等)|| 开始/结束.更"完成"的单词边界匹配.


pax*_*blo 5

您可以使用like通配符标记来捕获可能性(在开始,结束,中间和单独出现时),如下所示就足够了:

选择blah blah blah,其中“ rid%”之类的列或“%rid”之类的列,或“%rid%”之类的列或column =“ rid”

  • 我认为查询还不够。诸如“ rid”或“(rid)”之类的文本呢? (4认同)