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

有没有一种方法可以创建一个忽略特殊字符的索引,并在搜索普通的“ 123456789”时找到这些特殊字符?

最佳答案

没有方法无法完全按照您想要的方式做您想要的事情。

最好的机制是使用计算列。它不需要持久地进行索引。

初始位置

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'


执行计划寻求指标

关于sql-server - SQL Server中的搜索索引忽略特殊字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25645285/

10-09 20:00