【问题标题】:MAX of a varchar column using HQL使用 HQL 的 varchar 列的 MAX
【发布时间】:2011-12-09 14:14:58
【问题描述】:

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

这是我正在尝试执行的查询,这在本机 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] 方法节点:'(' [METHOD_NAME] IdentNode: 'cast' {originalText=cast} [EXPR_LIST] SqlNode: 'exprList' [DOT] DotNode:'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: '标记' {originalText=marks} [IDENT] IdentNode: '无符号' {originalText=unsigned}

【问题讨论】:

    标签: sql casting hql max varchar


    【解决方案1】:

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

    首先这足以获得MAX值

    SELECT MAX(marks) max_value FROM Results;
    

    其次 HSQL 中没有UNSIGNED 关键字。因此如果需要将结果值转换为INT

    SELECT CAST(MAX(marks) AS INT) max_value FROM Results;
    

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2013-01-10
      • 2011-02-11
      • 2010-12-12
      • 1970-01-01
      相关资源
      最近更新 更多