Hibernate HQL按名称排序忽略可选的“The”前缀

Hibernate HQL按名称排序忽略可选的“The”前缀,hibernate,substring,hql,named-query,Hibernate,Substring,Hql,Named Query,因此,我有一个命名查询,它搜索记录并按名为fullName的列对结果进行排序。其中一些全名的前缀是“The”-我想修改查询以忽略这些特定前缀。下面是当前命名查询的简化版本,其中包含条件的简化列表: select r from Record r where r.available = true ORDER BY r.fullName asc 试试这个: select r from Record r where r.available = true ORDER BY CASE

因此,我有一个命名查询,它搜索记录并按名为fullName的列对结果进行排序。其中一些全名的前缀是“The”-我想修改查询以忽略这些特定前缀。下面是当前命名查询的简化版本,其中包含条件的简化列表:

select r from Record r where r.available = true ORDER BY r.fullName asc
试试这个:

select r 
from Record r 
where r.available = true
ORDER BY 
    CASE 
        WHEN r.fullName LIKE "The%" THEN SUBSTRING(r.fullName, 5)
       ELSE r.fullName
    END asc
试试这个:

select r 
from Record r 
where r.available = true
ORDER BY 
    CASE 
        WHEN r.fullName LIKE "The%" THEN SUBSTRING(r.fullName, 5)
       ELSE r.fullName
    END asc

这正是我所需要的。从.length中得到一个小错误,但是取消子字符串的end参数仍然与end匹配。正确位置的小写字母使like不区分大小写。从记录r中选择r,其中r.available=true,当LOWERr.fullName与%s类似时,按大小写排序,然后选择SUBSTRINGr.fullName,5否则r.fullName结束asc@Snow:好的,我已经按照你的建议删除了substring的第三个参数;这正是我所需要的。从.length中得到一个小错误,但是取消子字符串的end参数仍然与end匹配。正确位置的小写字母使like不区分大小写。从记录r中选择r,其中r.available=true,当LOWERr.fullName与%s类似时,按大小写排序,然后选择SUBSTRINGr.fullName,5否则r.fullName结束asc@Snow:好的,我已经按照你的建议删除了substring的第三个参数;