你可以用 LIKE 做到这一点,但这会很可怕,正则表达式在这里会更好地为你服务。如果您想忽略哈希,那么像这样的简单搜索就可以解决问题:
WHERE body ~ E'\\mbird\M''
那会找到'The bird flew very far.'
and 'The #bird flew very far.'
。你想#
在搜索之前去掉任何 s ,尽管这样:
WHERE body ~ E'\\m#bird\M''
\m
由于 和 的性质,\M
找不到这些结果中的任何一个。
如果您不想忽略#
s inbody
那么您必须自己扩展和修改\m
和\M
快捷方式,如下所示:
WHERE body ~ E'(^|[^\\w#])#bird($|[^\\w#])'
-- search term goes here^^^^^
使用E'(^|[^\\w#])#bird($|[^\\w#])'
会找到'The #bird flew very far.'
但不会'The bird flew very far.'
,而E'(^|[^\\w#])bird($|[^\\w#])'
会发现'The bird flew very far.'
但不会'The #bird flew very far.'
。您可能还想查看\A
而不是^
和\Z
而不是$
因为存在细微的差异,但我认为$
并且^
会是您想要的。
您应该记住,这些正则表达式搜索(或您的 LIKE 搜索)都不会使用索引,因此您正在为大量表扫描和性能问题设置自己,除非您可以使用将使用的东西来限制搜索指数。您可能想查看全文搜索解决方案。