2017-10-03 2 views
0

J'ai une recherche où les utilisateurs peuvent entrer n'importe quelle valeur, parfois légitimement juste numérique. Lorsque vous recherchezSql Server 2008 "Contient" la recherche de valeur numérique retourne tous les enregistrements avec un nombre différent de la même longueur?

Select * FROM Updates WHERE contains(Remarks, '"10010234331"') 

obtenir des résultats sans rapport avec qui ont des numéros dans la même longueur, soit un match pour ce qui précède est

"PO input differently on orders, refs are: 

1001024894 
10010248940" 

Comme vous pouvez le voir, la recherche n'est pas une sous-chaîne de l'un ou l'autre. Des idées comment le dire pour ne pas deviner?

+0

Peut-on utiliser pas' like'? – dbajtr

+0

Nous sommes à la recherche d'un champ de texte avec indexation de texte intégral, le volume d'enregistrements à rechercher signifie que l'utilisation de Like est lente et irréalisable. – Stormtreader

Répondre

0

Droite. Aussi incroyable que cela puisse paraître, il s'avère que si l'index de texte intégral "langue pour disjoncteur" est réglé sur autre chose que "anglais", l'index de texte intégral indexera seulement les 5 premiers numéros de une chaîne de nombres. Cela signifie que ce qui précède est renvoyé en tant que correspondance car ils commencent tous les deux "10010".

« français, « allemand », « hébreu », même « neutre » renvoyait des résultats incorrects, que « l'anglais » renvoie correspond uniquement à la chaîne entière.

create table wtFTI(taskid int not null , remarks text, constraint [PK__wtFTI] primary key(taskid)) 
insert into wtfti 
values(3513792, 'Remarks: 1001019658 was cancelled 26/08') 
GO 

CREATE FULLTEXT CATALOG [TaskRemarks]WITH ACCENT_SENSITIVITY = OFF 

GO 

CREATE FULLTEXT INDEX ON [dbo].[wtFTI] KEY INDEX [PK__wtFTI] ON ([TaskRemarks]) WITH (CHANGE_TRACKING = AUTO, STOPLIST = SYSTEM) 
GO 
ALTER FULLTEXT INDEX ON [dbo].[wtFTI] ADD ([remarks]LANGUAGE 'French') 
GO 
ALTER FULLTEXT INDEX ON [dbo].[wtFTI] ENABLE 
GO 


Select * FROM [wtFTI] WHERE contains(Remarks, '"1001019000"') 

ALTER FULLTEXT INDEX ON [dbo].[wtFTI] DROP ([remarks]) 
GO 
ALTER FULLTEXT INDEX ON [dbo].[wtFTI] ADD ([remarks] LANGUAGE 'English') 
GO 


Select * FROM [wtFTI] WHERE contains(Remarks, '"1001019000"')