МАКСИМАЛЬНОЕ значение столбца varchar с использованием HQL

#sql #casting #hql #max #varchar

#sql #Кастинг #hql #максимальное #varchar

Вопрос:

Я пытаюсь найти максимальное значение столбца varchar в базе данных MySQL, используя язык запросов hibernate.

Это запрос, который я пытаюсь выполнить, и он отлично работает в собственном SQL:

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

где column:marks — это varchar .

Предположим, что метки столбцов (где все значения сохраняются в виде текста) содержат следующие строки:

 65
75
82
41
  

Затем запрос должен вернуть мне уникальный результат «82».
Но когда я написал то же самое в HQL, это не сработало. Может ли кто-нибудь, пожалуйста, помочь мне, рассказав, как написать это в режиме гибернации?

Консоль сообщает:

java.lang.Исключение IllegalStateException: нет типа данных для узла:org.hibernate.hql.ast.tree.AggregateNode
[AGGREGATE] AggregateNode: 'max'
[METHOD_CALL] MethodNode: '('
[ИМЯ_МЕТОДА] IdentNode: 'приведение' {originalText=приведение}
[EXPR_LIST] SqlNode: 'exprList'
[ТОЧКА] DotNode: 'results0_.marks_'
{propertyName=marks,dereferenceType=4,propertyPath=marks,path={synthetic-alias}.marks,tableAlias=results0_,className=com.Results,classAlias=rs}
[IDENT] IdentNode: '{синтетический псевдоним}' {originalText={синтетический псевдоним}}
[IDENT] IdentNode: 'метки' {originalText=метки}
[IDENT] IdentNode: 'unsigned' {originalText=unsigned}

Ответ №1:

Наткнулся на этот вопрос и решил ответить, хотя он очень старый.

Прежде всего, этого будет достаточно, чтобы получить МАКСИМАЛЬНОЕ значение

 SELECT MAX(marks) max_value FROM Results;
  

Во-вторых UNSIGNED , в HSQL нет ключевого слова. Поэтому, если результирующее значение необходимо преобразовать в INT

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