我在SQL Server表中有一个[nvarchar]列,其中包含123456789,123-456789,1234.56.789,1.23456-789等数据。用户只需在某处添加点,减号和空格以便于阅读,我不知道在哪里。
有没有办法创建一个忽略特殊字符的索引,并在搜索普通字符时找到这些字符" 123456789"?
答案 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'