我想写一个SQL查询,在文本字段中搜索关键字,但只有当它是"全字匹配"时(例如,当我搜索"rid"时,它不应该匹配"arid",但它应该匹配"一个摆脱".
我正在使用MySQL.
幸运的是,性能在这个应用程序中并不重要,数据库大小和字符串大小都很小,但我更喜欢在SQL中而不是在PHP中驱动它.
您可以使用REGEXP
和[[:<:]]
和[[:>:]]
字边界标记:
SELECT * FROM table WHERE keywords REGEXP '[[:<:]]rid[[:>:]]'
找到一个答案来防止经典单词边界[[::<::]]
与特殊字符冲突,例如.@#$%^&*
更换..
SELECT * FROM table WHERE keywords REGEXP '[[:<:]]rid[[:>:]]'
有了这个..
SELECT * FROM table WHERE keywords REGEXP '([[:blank:][:punct:]]|^)rid([[:blank:][:punct:]]|$)'
后者匹配(空格,制表符等)|| (逗号,括号等)|| 开始/结束.更"完成"的单词边界匹配.
您可以使用like
通配符标记来捕获可能性(在开始,结束,中间和单独出现时),如下所示就足够了:
选择blah blah blah,其中“ rid%”之类的列或“%rid”之类的列,或“%rid%”之类的列或column =“ rid”