Привет, кто-нибудь может мне помочь, как округлить до 2 десятичных знаков в hql?
Я ничего не могу найти в Интернете. Ниже мой запрос:
Select p.amount as amt,p.desc from pay p, register r where r.type=?1 and r.code=?2;
Я был бы рад, если кто-то может помочь в этом.
Используемая технология: hibernate, spring, java, primefaces 4.0, база данных oracle
Я много боролся с этим, наконец нашел следующее решение:
Если вы хотите быть более независимым от БД и специально хотите поддерживать Postgres или Oracle DB, вы можете использовать функцию наполовину для округления, которая довольно универсальна и не оставляет много места для разных реализаций, то есть это, вероятно, будет работать со всеми базами данных (проверено с помощью Postgres и MySQL).
Фрагмент выполняет округление до двух цифр и раундов по абсолютной величине. Вы можете легко адаптировать это к вашим потребностям.
Рассчитайте деление на 100, используя 100.0. Это гарантирует, что вы всегда получите двойной результат, что особенно важно, если вы построите сумму по округленным значениям.
floor(abs(value) * 100 + 0.5)/100.0 * sign(value)
Это сработало для меня
cast(value as decimal(9,2))
используйте функцию FORMAT
по свойству до 2 десятичной точки
Select FORMAT(p.amount,2) as amt,p.desc from pay p, register r where r.type=?1 and r.code=?2;
в качестве альтернативы вы можете указать то же самое в файле сопоставления, как и ниже
<property name="amount">
<column name="amount" scale="15" precision="3" sql-type="number(15,2)"/>
</property>
select round(p.amount, 2) as amt, ...
основном вы также можете использовать функции sql в hql, в зависимости от того, какую базу данных вы используете