带记录的sql查询以开头并包含

guz6ccqo  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(449)

question:i need 开发一个查询,查找以搜索项开头的特定记录和包含该搜索项的记录。此外,两个子集都应该按某一列排序,而结果集则不应该排序。以term开头的记录应位于contains term记录的上方。
例:我有 students 我要所有名字以“jhon”开头的学生。名为“jhon”的学生应排在前面,姓“jhon”的学生应排在后面。
我有如下资料:
获取以搜索项开头的所有记录并将其保存到可诱惑的\u a,然后获取所有记录包含搜索项的所有记录并排除已在可诱惑的\u a中的结果并将其保存到可诱惑的\u b。现在两个tentable都应该尊重结果,所以我将tentable\u b转储到tentable\u a中,相信新记录是在表的最后附加的。但它们不是,它们被插入并被排序,我还没有应用排序。
我在merge语句中也做了同样的事情,但没有取得丰硕的成果。
我尝试在两个子查询(以开头和包含)之间进行联合,但结果数据集始终不显示以记录开头的查询。
场景:列id为| student的students表 select * FROM students where name like 'jhon%' UNION select * FROM students where name like '%jhon%'

gv8xihay

gv8xihay1#

使用 order by . 例如:

select s.*
from students
where name like '%jhon%'
order by charindex('jhon', name);

这个命令下了多远 'jhon' 在字符串中。如果你只想要那些 'jhon' 首先,你可以使用 case 表达式:

order by (case when name like 'jhon%' then 1 else 2 end)
qmb5sa22

qmb5sa222#

可以使用order by子句中的case表达式执行此操作:

select * from students where Name like '%jhon%'    -- select all students containing john
order by
    case                                           -- order by place of match first
        when Name like 'john%' then 0
        when Name like '%john%' then 1
    end,
    Name                                           -- then order by Name

相关问题