使用LIKE查找'确切的'比赛

时间:2016-02-15 11:49:44

标签: sql postgresql query-optimization

您好我需要在查询中添加WHERE子句。 问题是数字列包含如下值:

(row 1) 1015/14,910/15
(row 2) 90/15,14/15
(row 3) 10/15, 900/15, 1000/15
(row 4) 1019/15, 1018/15
(row 5) null

...

它的数字+年。在列中,我可以有更多数字或空值。列类型:字符串。

现在我需要找到数字" 10/15" 或其他。

我尝试使用数字LIKE'%10/15%'但结果是: (第1行)9 10/15

AND(第3行)10/15 ......

所以我无法使用它。

当我尝试使用WHERE nr =' 10/15'我发现只有1个数字= 10/15的行。

那么我怎样才能找到只有我的部分字符串但只有完整数字的行?不是吗?

2 个答案:

答案 0 :(得分:2)

如果您的表中包含大量数据,我可以建议一些效率太高的东西,但是您可以使用OR来检查并检查所有这些可能性:

SELECT *
FROM YourTable
WHERE number LIKE '10/15,%'
      OR number like '%, 10/15,%' 
      OR number like '%, 10/15'

只需将其调整为保存数据的方式(使用空格或没有空格,因为您同时发布了空格而没有...)

答案 1 :(得分:2)

我认为正则表达式可能在这里很好用:

where num_text ~ '\D10/15\D|^10/15\D|\D10/15$|^10/15$'

\D原子表示任何非数字。

这有点模糊,但ts_vector可能对您有用:

select *
from Your_Table
where
  to_tsvector(num_text) @@ '10/15'

ts_vector方法作为可伸缩性优势 - 如果您要搜索数百万行,有很多方法可以让它变得非常快。如果你有1000行,那么它几乎不重要。