在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()
,但是我认为它不支持正则表达式。