在SQL Server中,我正在使用此查询

select *
from Unit c
ORDER BY CONVERT(INT, LEFT(name, PATINDEX('%[^0-9]%', name + 'z')-1)) desc;


我希望此查询在Hibernate中使用。当我在Hibernate中使用此命令时,出现错误

java.lang.IllegalArgumentException:org.hibernate.hql.ast.QuerySyntaxException:意外令牌:第1行,第122列附近
[SELECT c FROM models.entities.UnitEntity c WHERE c.expSetId =:expSetId AND isWaitArea =:isWaitArea ORDER BY CONVERT(INT,LEFT(name,PATINDEX('%[^ 0-9]%',name +'z' )-1))asc]

最佳答案

其中一些不在休眠的方言中,您可以使用left更改substring,使用convert更改cast。至于patindex我找不到替代品。您可以将pathindex添加到您使用的方言的构造函数中

registerFunction( "patindex", new StandardSQLFunction("patindex") );


或创建patindex()到存储过程。

那么您可以使用类似以下的内容:

from Unit c order by cast(substring(name, 0, PATINDEX('%[^0-9]%', name + 'z')-1) as integer);


或者您可以使用locate()代替patindex(),但是我认为它不支持正则表达式。

09-25 21:24