用hibernate查询1周内过生日的员工,急

kukoukele 2007-07-06 01:39:58
我用的插件是hibernate,数据库里有个员工表clerk,里面存储了员工的基本信息
我现在要查询所有在一周内要过生日的员工,在页面上列出来,不大懂这里面的SQL语句怎么写,clerk表里有个字段birthday,高分求助!
...全文
536 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
怎么结贴了就没人回答了啊
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
郁闷啊,这东西放到mysql里可以通过
但放到java代码里,就出错啦!
List<Clerk> birthdayClerkList = null;
try{
String hql = "from Clerk cle where DATE_FORMAT(birthday,'%m%d') >= " +
"DATE_FORMAT(NOW() ,'%m%d') and DATE_FORMAT(birthday,'%m%d')" +
" <= DATE_FORMAT(DATE_ADD(NOW(),Interval 7 DAY) ,'%m%d')";
//Query query = getSession().createQuery(hql);
//birthdayClerkList = query.list();
birthdayClerkList = this.getHibernateTemplate().find(hql);
}catch (DataAccessException e) {
log.error("Error in getAllBirthdayClerkList.", e);
throw new DaoException("Error in getAllBirthdayClerkList.", e);
}

====================================
org.springframework.orm.hibernate3.HibernateQueryException: unexpected token: 7 near line 1, column 187 [from com.foundersoftware.ehr.object.hr.Clerk cle where DATE_FORMAT(birthday,'%m%d') >= DATE_FORMAT(NOW() ,'%m%d') and DATE_FORMAT(birthday,'%m%d') <= DATE_FORMAT(DATE_ADD(NOW(),Interval 7 DAY) ,'%m%d')]; nested exception is org.hibernate.hql.ast.QuerySyntaxError: unexpected token: 7 near line 1, column 187 [from com.foundersoftware.ehr.object.hr.Clerk cle where DATE_FORMAT(birthday,'%m%d') >= DATE_FORMAT(NOW() ,'%m%d') and DATE_FORMAT(birthday,'%m%d') <= DATE_FORMAT(DATE_ADD(NOW(),Interval 7 DAY) ,'%m%d')]
Caused by:
org.hibernate.hql.ast.QuerySyntaxError: unexpected token: 7 near line 1, column 187 [from com.foundersoftware.ehr.object.hr.Clerk cle where DATE_FORMAT(birthday,'%m%d') >= DATE_FORMAT(NOW() ,'%m%d') and DATE_FORMAT(birthday,'%m%d') <= DATE_FORMAT(DATE_ADD(NOW(),Interval 7 DAY) ,'%m%d')]
求解!
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
SELECT birthday FROM ehr.hr_clerk WHERE DATE_FORMAT(birthday,'%m%d')>=DATE_FORMAT(NOW() ,'%m%d')
and DATE_FORMAT(birthday,'%m%d')<=DATE_FORMAT(DATE_ADD(NOW(),Interval 7 DAY) ,'%m%d')

下面一行是<=
真强,谢谢
这个双休得把这方面加强一下
shan1119 2007-07-06
  • 打赏
  • 举报
回复
http://www.bitscn.com/mysql/art/20060430/20213.html

没用过mysql,上边是照着网上例子写的,有可能有错,你参照上边的网站,里边有对日期的处理.
shan1119 2007-07-06
  • 打赏
  • 举报
回复
DATE_FORMAT(birthday,'%m%d')>=DATE_FORMAT(NOW() ,'%m%d')
and DATE_FORMAT(birthday,'%m%d')>=DATE_FORMAT(DATE_ADD(NOW(),Interval 7 DAY) ,'%m%d')
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
有在mysql里的吗?
我想应该有日期这方面的函数,就是不知道是哪些
shan1119 2007-07-06
  • 打赏
  • 举报
回复
我是写的oracle的.不好意思.
shan1119 2007-07-06
  • 打赏
  • 举报
回复
to_char(to_date(birthday,'YYYY-MM-DD'),'MM-DD')>=to_char(sysdate ,'MM-DD')
and to_char(to_date(birthday,'YYYY-MM-DD'),'MM-DD')<=to_char(sysdate-7 ,'MM-DD')
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
综合2楼和3楼的SQL语句在mysql里查不到结果
PS:工生日提醒(一周前开始提醒,有效期为该员工生日当天结束后)
ssnec 2007-07-06
  • 打赏
  • 举报
回复
综合2楼3楼的就是答案.
shan1119 2007-07-06
  • 打赏
  • 举报
回复
to_date(birthday,'YYYY-MM-DD')>=sysdate and to_date(birthday,'YYYY-MM-DD')<=sysdate-7
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
shan1119(大天使,卐~解!)
==========================
你的年份不对啊,只能查出当前年份的
kukoukele 2007-07-06
  • 打赏
  • 举报
回复
那个birthday的字段是2007-07-06
ChDw 2007-07-06
  • 打赏
  • 举报
回复
哦,算得不对。写错了
shan1119 2007-07-06
  • 打赏
  • 举报
回复
birthday>=sysdate and birthday<=sysdate-7
ChDw 2007-07-06
  • 打赏
  • 举报
回复
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 7);
session.createQuery("from clerk c where c.birthday < ?").setTimestamp(0, cal.getTime());

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧