我想要一个 SQLlike
查询,并让结果以输入参数开头,然后将结果的其余部分按字母顺序排序。
所以如果我有
Foobbb
aaafoo
Fooaaa
bFoob
cccfooccc
我搜索 foo 我希望它排序为:
Fooaaa
Foobbb
aaafoo
bFoob
cccfooccc
所以我最相关的项目是第一位的。想要一种清晰易懂且性能良好的方法来做到这一点?我可以创建一个临时表,但认为开销太大。
我试过了
DECLARE cemployer CURSOR
WITH RETURN
FOR SELECT employer
FROM ((SELECT employer_name, 1 AS grp
FROM employer e
WHERE Upper(employer_name) LIKE Upper(i_employer|| '%'))
UNION
(SELECT employer_name, 2 AS grp
FROM employer e
WHERE Upper(employer_name) LIKE Upper('%'||i_employer|| '%')))
ORDER BY grp,
employer;
OPEN cemployer;
但是,当我这样做时,我得到
Fooaaa
Foobbb
在结果集的底部再次重复。DB2 不允许我对外部查询进行区分。我知道我可以通过执行 substring 或 locate 或其他字符串函数以多种方式解决此问题,但想知道最优雅的方法来执行此操作并确保不返回重复项。