【问题标题】:grails createCriteria for date calculationgrails createCriteria 用于日期计算
【发布时间】:2016-09-30 04:34:36
【问题描述】:

我正在尝试使用 criteria 从数据库中获取数据

Domain class发票-

class Invoice{
    Date invoiceNo
    Date invoiceDate
    int interval

    static constraints = { }
    }

criteria 模块来自controller

if(!params.sort && !params.order) {
            params.sort = "invoiceDate + interval" //invoiceDate+ interval
            params.order = "asc"
        }
        def c = Invoice.createCriteria()
        def results = c.list(params) {
            between("invoiceDate+ interval", invoiceDate, invoiceDate+ interval)

        }

我想从invoiceDateinterval 计算dueDate

我想要这样的结果

invoiceNo | invoiceDate | interval| dueDate    |
001       | 2016-09-30  | 5       | 2016-10-05 |
002       | 2016-09-15  | 5       | 2016-09-20 |

【问题讨论】:

  • 您遇到了什么问题/错误?
  • 我没有结果字段 invoiceDate+ interval 那么代码不可能工作..
  • @AbhinandanSatpute 查看我的域类,我只有invoiceNoinvoiceDateinterval,但我试图从invoiceDate + interval 获取一个字段,例如@ 987654337@ = 2016-09-30 00:000:00interval = 5 ,那么结果一定是2016-10-05 00:00:00
  • 您能否就您想要实现的目标和面临的问题添加更多解释?
  • 所以,简单来说dueDate 将是invoiceDate + interval,对吧?

标签: grails grails-orm


【解决方案1】:

我会坚持让您修改您的Domain class 以添加derived field,如下所示。

修改Domain class - 添加派生字段dueDate

class Invoice{
Date invoiceNo
Date invoiceDate
int interval

//new field added
Date dueDate //Derived filed- will not persisted to the database

static mapping = {
   //formula to calculate dueDate (invoiceDate + interval)
    dueDate formula:"ADDDATE(invoice_date, interval)"
}

static constraints = { }
}

criteria 代码 sn-p- 获取dueDate 介于current Datecurrent Date + 7 之间的发票。

def criteria = Invoice.createCriteria()

   Date currentDate =  new Date()

   //fetching data based on the criteria
   List invoiceList = criteria.list {
         between('dueDate', currentDate, (currentDate + 7))
     }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多