1

我有一个名为的字段ebOpenUptoDaysStartDate在我的域类中名为 Training

现在让我们说

ebOpenUptoDays = 10(天)

开始日期 = 2013 年 10 月 30 日

我想ebExpiryDate通过以下计算从我的 HQL 中调用日期

ebExpiryDate = 开始日期 - ebOpenUptoDays

ebExpiryDate = 2013 年 10 月 20 日(需要这种格式)

trainingList  = Training.executeQuery("SELECT ........... as ebExpiryDate from Training as t)
4

1 回答 1

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)尝试使用本机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' DAY)) 应该在 hql 中为您工作。希望这可以帮助!!!

谢谢

于 2013-10-03T06:54:20.507 回答