2015-12-14 28 views
0

我試圖寫一些代碼基於在SQL Server(2008+)SQL文本比較 - 處理多種類型的撇號

列,我們的部分/完整輸入匹配搜索varchar字段和比賽結果搜索是一個NVARCHAR列,因此支持多種撇號和引號。這些措施包括,但可能不限於:

  • '正常' 撇號 - '
  • 右單引號 - '
  • 左單引號 - 「

同樣有各種雙引號需要考慮......

用戶可以輸入任何單引號,並且我想返回包含該s的任何變體的結果單字符,雙引號相同。

就像一個_CI歸類爲「E」進行搜索時將返回結果爲「E」或「E」,和_AI歸類爲「A」進行搜索時將返回A或A成果,是有沒有會忽略引號變化的整理?

目前的解決方法是要做到:

WHERE my_field LIKE REPLACE(REPLACE(REPLACE(REPLACE(search_term, CHAR(145), CHAR(39)), CHAR(146), CHAR(39)), CHAR(147), CHAR(34)), CHAR(148), CHAR(34)) 

(是不是可擴展性和可怕閱讀)

回答

1

標準的做法是創建一個可搜索的數據的「規範化」版本,刪除複數並標準化或刪除標點符號。

SQL Server通過其「全文搜索」功能提供此功能和附加搜索功能。要使用FTS,您需要設置並啓用它,但默認情況下不啓用。

如果您不需要FTS的所有功能,您也可以推出自己的產品。根據您的要求,這可能會也可能不值得。

+0

謝謝 - 我們可能會更進一步(最終),並在應用程序服務器上創建Lucene搜索。我希望在此期間進行快速修復!我將研究FTS的潛在缺點(例如它是否會影響寫入時間?)並考慮這一點。 – JLo