2015-08-14 54 views
3

我正在嘗試編寫查詢以獲取日期大於11個月或小於12個月的所有數據。我已經嘗試了下面的查詢,以天返回日期差異。有幾個月我可以檢查嗎?Mysql。以月爲單位的日期差異

$qb ->select("pj,DATE_DIFF(CURRENT_TIME(), pj.date) as dt) 
    ->from("PrevJbs", "pj"); 

回答

2

有Mysql的功能PERIOD_DIFF

能做到這一點更容易,但它的運作期全

$qb ->select(" 
     pj, 
     PERIOD_DIFF(DATE_FORMAT(CURRENT_TIME(), '%Y%m'), DATE_FORMAT(pj.date, '%Y%m')) AS dt 
    ") 
    ->from("PrevJbs", "pj"); 
2

這很容易以天計算。

但在幾個月......我們可以有30,31,28 ......

Mysql的(我知道)有沒有功能個月來計算差異。

所以我們應該使用https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_month自己做。

另外我們應該記住,年份可以不同,我們將使用https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_year

讓我們試着...

$qb ->select(" 
     pj, 
     ((YEAR(CURRENT_TIME()) - YEAR(pj.date)) * 12 + 
      IF ((MONTH(CURRENT_TIME()) >= MONTH(pj.date)) 
       MONTH(CURRENT_TIME()) - MONTH(pj.date), 
       MONTH(CURRENT_TIME()) + 12 - MONTH(pj.date) 
      ) 
     ) as dt 
    ") 
    ->from("PrevJbs", "pj"); 
1

我是正確的思維,你只想列出12至11個月之間的所有項目?

使用DQL你可以使用..

return $qb 
    ->select('pj') 

    ->where($qb->expr()->lt('pj.date', ':lessThan')) 
    ->setParameter('lessThan', new \DateTime('- 12 months')) 

    ->orWhere($qb->expr()->gt('pj.date', ':greaterThan')) 
    ->setParameter('greaterThan', new \DateTime('- 11 months')) 

    ->getQuery() 
    ->getResult();