#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;