我的域名中有一个名为ebOpenUptoDays
和StartDate
的字段名为Training
现在让我们说
ebOpenUptoDays = 10(天)
StartDate = 2013年10月30日
我想通过以下计算从我的HQL获取名为ebExpiryDate
的日期
ebExpiryDate = StartDate - ebOpenUptoDays
ebExpiryDate = 2013年10月20日(需要采用此格式)
trainingList = Training.executeQuery("SELECT ........... as ebExpiryDate from Training as t)
答案 0 :(得分:1)
您可以使用三种可能的解决方案:
1)尝试在Grails域类的公式中使用DATE(DATE_SUB(StartDate,INTERVAL'$ {ebOpenUptoDays}'DAY))
2)尝试在createCriteria中使用投影,例如 //支持grails 2.1.0或以上版本。
Training.createCriteria.list{
projections{sqlProjection("DATE(DATE_SUB(start_date, INTERVAL 'eb_Open_Up_to_days DAY))",DATE)}
}
3)尝试使用native sql
编辑:为了支持hql,您需要创建自己的方言并在datasource.groovy中使用它(不测试)
public class MyDialect extends MySQLInnoDBDialect{
public myDialect() {
super();
registerFunction("date_add_interval", new SQLFunctionTemplate(Hibernate.DATE, "date_sub(?1, INTERVAL ?2 ?3)"));
}
}
然后,DATE(DATE_SUB(StartDate,INTERVAL'ebOpenUptoDays'天))应该在hql中为你工作。 希望这会有所帮助!!!
由于