我在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/