sql - 使用 HQL 的 varchar 列的最大值

标签 sql casting hql max varchar

我正在尝试使用休眠查询语言在 mySQL DB 中查找 varchar 列的最大值。

这是我正在尝试执行的查询,这在 native SQL 中运行良好:

select max(cast(rs.marks as unsigned)) from Results rs;

其中 column:marks 是一个 varchar。

假设列标记(其中所有值都保存为文本)具有以下行:
65
75
82
41

然后查询应该返回一个唯一的结果“82”。
但是当我在 HQL 中编写相同的内容时,它不起作用。任何人都可以通过告诉我如何在 Hibernate 中编写它来帮助我吗?

控制台说:

java.lang.IllegalStateException:节点没有数据类型:org.hibernate.hql.ast.tree.AggregateNode
[AGGREGATE] 聚合节点:'最大'
[METHOD_CALL] MethodNode: '('
[METHOD_NAME] IdentNode: 'cast' {originalText=cast}
[EXPR_LIST] SqlNode: 'exprList'
[DOT] 点节点:'results0_.marks_'
{propertyName=marks,dereferenceType=4,propertyPath=marks,path={synthetic-alias}.marks,tableAlias=results0_,className=com.Results,classAlias=rs}
[IDENT] IdentNode: '{synthetic-alias}' {originalText={synthetic-alias}}
[IDENT] IdentNode: 'marks' {originalText=marks}
[IDENT] IdentNode: 'unsigned' {originalText=unsigned}

最佳答案

遇到这个问题并决定回答,尽管它很老了。

首先这足以获得 MAX 值

SELECT MAX(marks) max_value FROM Results;

其次没有UNSIGNED HSQL 中的关键字。因此如果结果值需要转换为INT
SELECT CAST(MAX(marks) AS INT) max_value FROM Results;

关于sql - 使用 HQL 的 varchar 列的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7799155/

相关文章:

c - 为什么将未使用的函数参数值转换为 void?

android - 转换到 Button 是多余的 - 为什么?

sql - ADODB/Access : Update Multiple Fields from Record in Same Table

mysql - 只显示 mysql 子查询返回 null 的行

sql - 查询(或算法?)查找从两个不同位置到一个共享位置的最便宜的重叠航类

mysql - Hibernate 在一次查询中选择相关数据

java - 错误 org.hibernate.exception.SQLGrammarException : could not extract ResultSet

mysql - 将字符串插入 SELECT (MySql) 时保持前导零

java - 如何将未经检查的强制转换对象处理为 ArrayList<Vehicle>

java - Hibernate 在执行 native 查询时要快得多