2017-05-05 31 views
-2

要从id查询的数据,在从查询中获得的信息中,我需要计算天之间的de天从这个查询。按ID排序只计算las 2的值,并获得他们之间有GRAILS中的MYSQL之间的日期

result = DEVsTACK.executeQuery(" 
select maintenance 
    , advisor 
    , advisorId 
    , DATEDIFF(managementDate, appointmentDate) AS date 
    , Date 
    , carKm 
    , observations 
    FROM DEVsTACKAS 
order 
    by id DESC 
", [[offset:0, max:2]) 

例如
一二三 2017年4月21日12点36分10秒和2017年4月22日9点36分十秒和2017年4月26日9点36分十秒 一到两应该得到一天的答案,从两到三天的答案应该是四天,我需要从用户ID获取值,并查看从colum日期显示的日期之间有多少天。 谢谢,在高级

+0

我不跟着你,请你解释一下多一点? –

+0

我只需要通过advisorI获取数据本colum可以有多个行,其值在这些值之内我需要计算两者之间的天数,例如我给出的 – Melany

+0

示例给出了一个标记,因为它可能是您的英语,不了解。看着你的问题,我清楚地明白你在做什么。无论如何,在下面的回答中,如果您遵循代码库中的'internalDuration',您将看到它正被用来对列进行排序。因此根据该值知道哪些是第一个最后完美。可能不是人类可读的。相反,您可以看到重新返回的结果,并给出一个新的字段实例 - >然后附加一个新的'instance.duration'。 – Vahid

回答

0

我建议你使用createCriteriafollow this link。您可以使用maxResult

这是我的例子createCriteria

def c = PerintahKerja.createCriteria() 
     def results = c.list(params) { 
      if(params.noPerintah) { 
       ilike("noPerintah", "%${params.noPerintah}%") 
      } 
      if(params.from){ 
       from = new Date().parse('dd/MM/yyyy hh:mm:ss', params.from+" 00:00:00") 
      } 
      else{ 
       from = removeTime(from) 
      } 
      if(params.to){ 
       to = new Date().parse('dd/MM/yyyy hh:mm:ss', params.to+" 00:00:00") 
      }else{ 
       to = removeTime(to) 
      } 

      ge("tanggalPerintah", from) 
      le("tanggalPerintah", to) 

      eq("deleteFlag", "N") 
      eq("cif", cif) 
     } 

仅供参考,你可以得到日期范围gsp。例如

|managementDate  | appointmentDate  | countDay| 
|-------------------------------------------|---------| 
|2017-04-21 12:36:10 | 2017-04-22 12:36:10 | 1  | 

将此列表丢到gsp之后。

你可以做这样的事情来获得两个日期之间的范围。

<% 
    use(groovy.time.TimeCategory) { 
     def duration = date1 - date2 
     print "Days: ${duration.days}, Hours: ${duration.hours}, etc." 
    } 
%> 
0

您可以在HQL中做到这一点。因此,您目前正在执行“executeQuery”,也就是HQL查询。

First point你可以在HQL中运行特定的mysql命令,默认情况下会给你两个日期之间的区别,所以不需要额外的工作来使用timeCategory或者任何额外的与db结果混淆。

MySQL的:

FROM_UNIXTIME(UNIX_TIMESTAMP(coalesce(rq.finished,rq.start)) - UNIX_TIMESTAMP(rq.start)) 

这一操作将失败,而你在内部数据库 测试你的查询,以便instead

CONVERT(concat(hour(rq.finished)*60*60+minute(rq.finished)*60+second(rq.finished)) ,INTEGER) - 
       CONVERT(concat(hour(rq.start)*60*60+minute(rq.start)*60+second(rq.start)) ,INTEGER) 
      as internalDuration, 

更改rq.finished and rq.start你的日期字段managementDate, appointmentDate如果你想

生产days hours months之前等:

results=results?.each { instance -> 
      TimeDuration duration=getDifference(instance?.startDate,instance?.finishDate) 
      instance.duration=formatDuration(duration) 

其中采用getDifference

private TimeDuration getDifference(Date startDate,Date endDate) { 
     if (startDate && endDate) { 
      //return TimeCategory.minus(endDate, startDate) 
      TimeDuration customPeriod = use(TimeCategory) { 
       customDuration(endDate - startDate) 
      } 
      return customPeriod 
     } 
    } 
    TimeDuration customDuration(TimeDuration tc) { 
     new TimeDuration( tc.days , tc.hours, tc.minutes, tc.seconds, ((tc.seconds > 0||tc.minutes > 0||tc.hours > 0) ? 0 : tc.millis)) 
    }