【问题标题】:match & against to find a string in sql匹配和反对在sql中查找字符串
【发布时间】:2017-01-31 17:39:41
【问题描述】:

我有:

 ----------------------------
| ID          |  Workout     |
|_____________|______________|
| 1           |Chest workout |
| 2           |beach Workout |
| 3           |End workout   |
_____________________________

基本上我想在我的workout 列中搜索一个字符串。

现在如果你尝试SELECT * FROM db.table WHERE MATCH (workout) AGAINST('workout'); 或者SELECT * FROM db.table WHERE MATCH (workout) AGAINST('Chest'); 他们都可以正常工作。

但是如果你尝试SELECT * FROM db.table WHERE MATCH (workout) AGAINST('est');

仅供参考:(就像在 Chest 中一样)即使我的 workout 列中有一个名为 Chest 的行也不起作用。

如果您告诉我如何在全文和单词中选择一个字符串并按字符第一个字符排序它们,例如 1. 结束锻炼、2. 海滩锻炼、3. SQL 中的胸部锻炼,我将不胜感激。

【问题讨论】:

  • 你能用like吗?
  • 如果您现有的代码工作正常,那么您没有使用 SQL Server。我删除了标签。
  • 我觉得你可以关掉短字设置
  • @krishnpatel 你能给我一个like的例子吗?
  • @Jaywardan 已经有两个答案了

标签: mysql sql


【解决方案1】:

LIKE 声明不能满足您的需求吗? 像这样的:

SELECT *
FROM table WHERE workout LIKE '%est%'

上面的查询应该返回任何包含 est 的东西。

【讨论】:

  • 这非常有效,你能告诉我如何按单词开头的字符排序它们吗?我的意思是SELECT * FROM table WHERE workout LIKE '%e%',所以它应该像这样排序:1.结束锻炼,2.海滩锻炼,3 . 胸部锻炼。
  • 您应该能够根据您想去的方向使用“ORDER BY锻炼desc”或“asc”。
  • 恐怕我不能使用like,因为 Gordon Linoff 说它不使用索引,但我的表行很大,所以我需要一种索引方式或更好的方法来找到字符串更快。你知道从性能角度来看有什么更好的方法吗?
  • @Jaywardan 我相信您可以调整 like 语句的性能。 [link]stackoverflow.com/questions/1388059/… 有一个很好的关于如何去做的细分。
【解决方案2】:

您的问题的答案是您似乎想要:

where Workout like '%est%'

'est' 是一个子字符串,而不是一个单词。在使用全文索引时,这是一个非常重要的区别。如果您需要搜索任何字符串,那么like 具有该功能。 MATCH基本是在找词。

不幸的是like 在这种情况下不会使用索引。如果您有大量数据,您可能需要寻找更适合此问题的替代技术。

【讨论】:

  • 哦,什么?我的表行很大我需要索引方式,你说其他技术你能举个例子吗?
  • Postrgres 具有 GIN 和 GIST 索引,可以优化 LIKE 查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 2013-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多