我是HQL的新手,我需要进行以下MSSQLServer查询,以便在所有数据库中执行每月和每年的销售,
select count(sales) as monthsales from salesdairy where propertytype in ('item1') and MONTH(time) = MONTH(getdate())
select count(sales) as yearsales from salesdairy where propertytype in ('item1') and YEAR(time) = YEAR(getdate())
我使用函数MONTH(time) = MONTH(getdate()),YEAR(time) = YEAR(getdate())
来解决HQL中是否有任何等价物。
如果有人能给我HQL等价物,我将不胜感激。
答案 0 :(得分:1)
在HQL而不是表中你有实体(类对象)。 我想你的桌子销售商变成了SalesDiary实体。
首先查询:
select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and MONTH(S.time) = MONTH(current_date)
第二次查询:
select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and YEAR(S.time) = YEAR(current_date())
函数MONTH获取输入日期的月份数,YEAR函数获取输入日期的年份数。
current_date()等同于SQL Server GETDATE()。
评论后编辑 很奇怪,Hibernate必须使用下划线DBMS的正确函数进行转换。
如果你可以使用参数试试这个:
select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and YEAR(S.time) = YEAR(:currDate)
当您将HQL查询提供给对象Query时,您将以这种方式用setDate函数替换您的currDate参数:
String hql =
"select count(S.id)
from SalesDiary S
where S.propertytype in ('item1')
and YEAR(S.time) = YEAR(:currDate)";
Query q = session.createQuery(hql);
q.setDate("currDate", new GregorianCalendar().getTime());
q.list();
我希望现在没问题;)