+ -
当前位置:首页 → 问答吧 → hql问题

hql问题

时间:2011-12-02

来源:互联网

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
//通过截取订单时间的年月来统计月订单数
String month = sdf.format(new Date());
String hql = "from OrderInfo o where (select substring(o.orderTime,0,8) from o) ='"+month+"'";
为什么不行....有什么好的解决方法吗?
我将生成的hql语句copy到sql2008中测试时报下面的错误:
消息 512,级别 16,状态 1,第 1 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

作者: adongshahua   发布时间: 2011-12-02

高手速度来啊...
在线等...

作者: adongshahua   发布时间: 2011-12-02

楼主,你数据库那时间的那个字段是时间类型的吗?如果是的话,给你一个解决方案 :
你用 hibernate 的 createSQLQuery() 这个方法查询 ,支持 sql 语句

 Select * From TableName Where DateDiff(mm, DateTimCol, GetDate()) = 0
  其中 TableName 为表名 .DateTimCol 为表中时间 字段 . 用 DateDiff 函数 可用来决定两个日期之间所指定的时间间隔数目。 等于0 。 mm 表示月。 等于0 为当月 
这条语句就可以实现  

希望 能帮到你!

作者: mgz521009   发布时间: 2011-12-02

根据substring(o.orderTime,0,8)截取的年月分组查询就能统计出月订单了。。。

作者: kouyiSC   发布时间: 2011-12-02

引用 2 楼 mgz521009 的回复:
楼主,你数据库那时间的那个字段是时间类型的吗?如果是的话,给你一个解决方案 :
你用 hibernate 的 createSQLQuery() 这个方法查询 ,支持 sql 语句

Select * From TableName Where DateDiff(mm, DateTimCol, GetDate()) = 0
其中 TableName 为表名 .DateTimCol 为表中……

同意

作者: wang7535067   发布时间: 2011-12-02

String month = sdf.format(new Date());
String sql= "select * from OrderInfo o where (select substring(o.orderTime,0,8) from o) ="+month;

正对于你这种问题建议用createSQLQuery()方法,因为hql在直接拼接的时候有时候会出现错误!毕竟sql跟hql是有区别的
 
所以建议用session.createSQLQuery(sql);用这个试试

作者: oyxm0   发布时间: 2011-12-02