如何在SQL Server中搜索文本忽略特殊字符?

时间:2011-09-20 21:07:50

标签: sql sql-server

我需要在一个包含特殊字符的文本字段(名为Description)的表中搜索:ñ,á,ó......

Ex:Description =“Lacancióntienebuen ritmo !!!”

我可以搜索'cancion'或'canción',这行需要返回。

所以,我做了:

  1. 替换此特殊字符的函数。
  2. 使用它在表格中搜索的选择:

    SELECT IdItem, Description
      FROM tblItemsTable
     WHERE dbo.fnReplaceSpecialChars ( Description ) LIKE '% word%'
        OR dbo.fnReplaceSpecialChars ( Description ) LIKE 'word%'
    
  3. 我的问题是搜索速度很慢......

    可以以更好/优化的方式完成吗?

    谢谢!

1 个答案:

答案 0 :(得分:4)

您可以使用重音不敏感的排序规则(名称包含AI)以避免使用您的功能

SELECT 1
WHERE 'cancion' LIKE '%canción%' COLLATE Latin1_General_100_CS_AI


SELECT 1
WHERE 'cancion' LIKE '%canción%' COLLATE Latin1_General_100_CS_AS

使用前导通配符和显式collat​​e子句都意味着无法使用索引,因此在速度方面可能没有多大帮助。您可能需要考虑为此设置全文索引。

您需要构建全文目录WITH ACCENT_SENSITIVITY =OFF