Gad*_*ski -1 sql-server sql-server-2016 string-searching
我们有一张包含约 600 万种产品的表:
ID | 姓名 | 代码 |
---|---|---|
1 | 一 | 123.456.789-M |
2 | 二 | 852.789456 |
3 | 三 | 1-123654.P |
按代码列过滤产品而没有掩码(痕迹、斜线或点)的好方法(关于性能)是什么?
例子:
SELECT id, name FROM products WHERE code = '123456789M' OR code = '1123654P';
Run Code Online (Sandbox Code Playgroud)
小智 5
使用索引计算列:
CREATE TABLE dbo.Products
(
ID integer NOT NULL UNIQUE CLUSTERED,
[Name] varchar(10) NOT NULL PRIMARY KEY NONCLUSTERED,
Code varchar(20) NOT NULL,
SearchCode AS
ISNULL(
CONVERT(varchar(20),
REPLACE(
REPLACE(Code, '-', ''),
'.', '')
),
''),
INDEX [IX dbo.Products SearchCode (Name)]
(SearchCode)
INCLUDE ([Name])
);
INSERT dbo.Products
(ID, [Name], Code)
VALUES
(1, 'One', '123.456.789-M'),
(2, 'Two', '852.789456'),
(3, 'Three', '1-123654.P');
Run Code Online (Sandbox Code Playgroud)
SELECT P.ID, P.[Name]
FROM dbo.Products AS P
WHERE P.SearchCode = '123456789M';
Run Code Online (Sandbox Code Playgroud)
ID | 姓名 |
---|---|
1 | 一 |