我有一张约有2亿条记录的表。其中一列定义为varchar(100),并包含在全文索引中。大多数值是数字。只有少数不是数字。 问题是它运行不正常。例如,如果某行包含值“ 123456789”,而我寻找“ 567”,则该行不返回该行。它只会返回值恰好为“ 567”的行。 我在做什么错了?
sql server 2012。
谢谢。
答案 0 :(得分:1)
全文搜索不支持前导通配符
在我的设置中,这些返回的相同
SELECT *
FROM [dbo].[somelogtable]
where CONTAINS (logmessage, N'28400')
SELECT *
FROM [dbo].[somelogtable]
where CONTAINS (logmessage, N'"2840*"')
这给出了零行
SELECT *
FROM [dbo].[somelogtable]
where CONTAINS (logmessage, N'"*840*"')
您必须使用LIKE或某些fancy trigram approach
答案 1 :(得分:0)
99%在%
子句中搜索字符串前后,您缺少LIKE
。
es:
SELECT * FROM t WHERE att LIKE '66'
与使用WHERE att = '66'
如果您写:
SELECT * FROM t WHERE att LIKE '%66%'
将返回所有包含2个“六个”的行
答案 2 :(得分:0)
您可以这样做:
....your_query.... LIKE '567%' ;
这将返回在开头,结尾或中间某处具有数字567的所有行。
答案 3 :(得分:0)
问题可能是您使用了错误的工具,因为全文查询执行linguistic搜索,并且您似乎想使用简单的“赞”条件。
如果您想获得满足您需求的解决方案,则可以发布DDL + DML +“所需结果”