需要帮助才能理解为什么我的CONTAINS没有返回任何结果?

时间:2014-03-28 00:13:35

标签: sql-server tsql

在我阅读此问题之前,我从未听说过CONTAINS和全文索引 - Is there any way to search for numbers with leading zeros in SQL Server Full-text indexes

我尝试为此创建自己的sql示例,如下所示。但是,我的查询给了我零行。为什么?

最终查询 -

select *
from Philly
where contains(body,'123')

创建表的SQL,以便您可以运行上述查询 -

USE [MyDb]
GO
CREATE FULLTEXT CATALOG [DummyCatalog]
WITH ACCENT_SENSITIVITY = ON
AUTHORIZATION [dbo]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Philly](
    [id] [int] NOT NULL,
    [body] [nvarchar](max) NULL,
 CONSTRAINT [PK_Philly] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, 
IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
INSERT [dbo].[Philly] ([id], [body]) VALUES (1, N'I  like 000123')
INSERT [dbo].[Philly] ([id], [body]) VALUES (2, N'Hi Five !!!')

然后使用此处给出的说明在Body上创建全文索引 - http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/

2 个答案:

答案 0 :(得分:0)

也许是这样的:

select id, body from Philly where contains(body,' "*123" ');

我认为你需要在select语句中指定列名,在这种情况下你必须使用*前缀。

答案 1 :(得分:0)

我通常使用LIKE而不是contains,但只要表格是全文索引的,你就可以使用它。

select *
from Philly
where contains(body,'123')
如果您对表格进行了以下操作,

应该有效

CREATE FULLTEXT INDEX ON Philly KEY INDEX id

但是我认为运行

更容易
select * from Philly where body like '%123%'

哪个行将包含任何位于其中的任何位置的行继续进行或前面有任意数量的字符。