按名称排序最佳匹配

Dav*_*veo 1 sql db2 db2-luw

我想要一个SQL like查询,并且结果以首先排序的输入参数开始,结果的其余部分将按字母顺序排序.

所以,如果我有

Foobbb
aaafoo
Fooaaa
bFoob
cccfooccc
Run Code Online (Sandbox Code Playgroud)

我搜索foo我希望它排序为:

Fooaaa
Foobbb
aaafoo
bFoob
cccfooccc
Run Code Online (Sandbox Code Playgroud)

所以我最相关的项目是第一位的.想要清楚地理解和良好的表现方式吗?我可以创建一个临时表,但认为它太多了.

我试过了

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;  
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我得到了

Fooaaa
Foobbb
Run Code Online (Sandbox Code Playgroud)

在结果集的底部再次重复.DB2不允许我对outter查询进行区分.我知道我可以通过子串或定位或其他字符串函数以多种方式解决这个问题但想知道最优雅的方法来做到这一点并确保不返回重复项.

Mad*_*nan 7

一般方法

ORDER BY CASE WHEN col like 'foo%' THEN 1 ELSE 2 END,col
Run Code Online (Sandbox Code Playgroud)