在搜索功能中仅从名称中获取主题标签的相关值

fetch only related values of hashtags from name in search functionality

我在 java 和 postgresql 工作。
我有一个 table 名称 'videos' 和名称 'video_name' 中的一个字段,因此视频名称可以包含 #tag 值,例如 ex。

  1. 我最喜欢的明星#tom
  2. 周末愉快#friends#party马斯蒂
  3. #seefood#friends
  4. 共进晚餐
  5. #friendsEnjoy一起散步

所以现在在这种情况下,我想在这个字段 'video_name' 上仅使用主题标签进行搜索。如果我搜索#friends,我会得到第 2,3 个视频。

我想知道在这种情况下应该查询什么

我试过使用查询

select * from videos where video_name ilike '%#Friends'

但它没有给我确切的结果。

我也试过使用这个查询

 select * from videos where video_name ~* '#friends'

但是使用上面的查询我得到了 3 个结果 2、3、4。我只想要 2 和 3。

/**********************************回答************ ************************/

以上问题的答案如下。谢谢@Alex 视频包含在字符串前面带有 space 的主题标签,并且在该字符串前面再次包含新的#tag。

SELECT * 
FROM videos
WHERE lower(video_name) SIMILAR TO '%#friends(\s%|\#%)?'
SELECT * 
FROM videos 
WHERE video_name REGEXP '#friends'

here是postgresql版本如果你需要:

SELECT * 
FROM videos
WHERE video_name SIMILAR TO '%#friends%'

here 是如何解决区分大小写的示例

SELECT * 
FROM videos
WHERE lower(video_name) SIMILAR TO '%#friends%'

编辑another variant 与 space 检查:

SELECT * 
FROM videos
WHERE lower(video_name) SIMILAR TO '%friends(\s%|\#%)?'