2017-05-05 69 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)) 
    }