HQL:从Date中减去天数以获取新日期

时间:2013-10-03 06:23:54

标签: hibernate grails hql

我的域名中有一个名为ebOpenUptoDaysStartDate的字段名为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)

1 个答案:

答案 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中为你工作。 希望这会有所帮助!!!

由于