标题很拗口,但我发现很难解释。
我以前有一个 Web 服务,它允许用户输入搜索键,例如 4,然后返回以该搜索键开头的记录,例如 4、4a、4b。
现在我被要求实现一个解决方案,如果用户键入 4,它将返回结果:
4
4a
4aa
4b
5
5a
5b
5c
5Z
6
52.
etc..
50 条记录。
我不确定从哪里开始更改查询...正在搜索的 col 是字母数字,这是令人困惑的一点。
查询本身超过 20 行,但将结果链接到搜索键的部分只是;
(col LIKE @searchKey + '[a-zA-Z.]%' OR col = @searchKey OR col >= @searchKey)
根据要求,订购是:
ORDER BY
CASE WHEN col LIKE '[a-zA-Z]%' Then 1 ELSE 0 END,
CAST(SUBSTRING(col, 0,
CASE WHEN patindex('%[a-zA-Z.]%', col) = 0
THEN len(col)+1
ELSE patindex('%[a-zA-Z.]%', col)
END)
as INT),
CASE WHEN col LIKE '[a-zA-Z]%' THEN SUBSTRING(col, 1,1) END,
CASE WHEN col LIKE '[a-zA-Z]%' AND len(col) = 1 THEN 0 ELSE 1 END,
CASE WHEN col LIKE '[a-zA-Z]%' AND len(col) = 2 THEN 0 ELSE 1 END,
CASE WHEN col LIKE '[a-zA-Z]%' AND len(col) = 3 THEN 0 ELSE 1 END,
col;
例如,现在如果我传入 82,我会得到结果:
8
8A
8B
8E
8H
9
9A
9C
9D
9E
82
82A
82B
82C
.
.
.
.
99R
但是我需要的是,如果用户输入 82,他们不会收到 8、8x、9、9x 等结果。