SQL Server中的搜索索引忽略特殊字符

时间:2014-09-03 13:11:28

标签: sql-server search

我在SQL Server表中有一个[nvarchar]列,其中包含123456789,123-456789,1234.56.789,1.23456-789等数据。用户只需在某处添加点,减号和空格以便于阅读,我不知道在哪里。

有没有办法创建一个忽略特殊字符的索引,并在搜索普通字符时找到这些字符" 123456789"?

1 个答案:

答案 0 :(得分:1)

没有办法以你想要的方式做你想要的。

执行此操作的最佳机制是使用计算列。它不需要持久保存索引。

初始位置

CREATE TABLE YourTable
  (
     YourColumn NVARCHAR(50)
  );

INSERT INTO YourTable
VALUES      ('123456789'),
            ('123-456789'),
            ('1234.56.789'),
            ('1.23456-789');

创建计算列并将其编入索引。

ALTER TABLE YourTable
  ADD CanonicalForm AS 
 CAST(REPLACE(REPLACE(REPLACE(YourColumn, '.', ''), '-', ''), ' ', '') AS NVARCHAR(50));

CREATE INDEX ix
  ON YourTable(CanonicalForm)
  INCLUDE (YourColumn);

测试

SELECT *
FROM   YourTable
WHERE  CanonicalForm = '123456789'

执行计划寻求索引

enter image description here