2014-06-12 73 views
4

我試圖在包含電子郵件地址的表上執行全文搜索。使用通配符時的電子郵件地址欄全文搜索

比方說,我的表中包含的電子郵件地址:現在[email protected]

,因爲分詞在此電子郵件地址的功能分隔的時期。默認的SQL Server Stoplist阻止單個字符被索引(出於顯而易見的原因)。

通常不是一個問題,並尋找的地址工程就好了。不過,我希望能夠搜索部分的的地址。

我想通過使用下面的查詢來搜索[email protected]。這不會令人遺憾,因爲該地址未被編入索引爲「[email protected] ...」。

選擇 * FROM [通訊錄]一個 WHERE CONTAINS([A]。* ' 「abbuilder @真正*」')

如何解決這個任何建議?在SQL Fiddle上的測試示例。

+0

你有沒有解決這個問題? – Botis

回答

1

您可以使用LIKE操作:

SELECT * FROM [Addressbook] a WHERE EmailAddress LIKE '[email protected]%'; 

只能一個字符串值CONTAINS傳遞給第二個參數。我認爲沒有一種方法可以繞過這一點,而不會犧牲性能。

所以,如果你傳遞一個wildcard將採取整個字符串值作爲條件:

SELECT * FROM [Addressbook] a WHERE CONTAINS([a].*, '[email protected]*') 

你可以看到,你可以串link使用功能的鏈接租賃。唯一能看出你能解決這個問題的方法是自己編寫一些LIKE函數,然後將返回的值傳遞給CONTAINS。但是這會使你的表現比使用LIKE運算符更糟糕。

SQL Fiddle

+2

由於性能原因,我使用全文索引。這就是爲什麼我希望看到使用CONTAINS的解決方案。 –

+0

查看上面的修改 – codemonkey

相關問題