我正在嘗試編寫查詢以獲取日期大於11個月或小於12個月的所有數據。我已經嘗試了下面的查詢,以天返回日期差異。有幾個月我可以檢查嗎?Mysql。以月爲單位的日期差異
$qb ->select("pj,DATE_DIFF(CURRENT_TIME(), pj.date) as dt)
->from("PrevJbs", "pj");
我正在嘗試編寫查詢以獲取日期大於11個月或小於12個月的所有數據。我已經嘗試了下面的查詢,以天返回日期差異。有幾個月我可以檢查嗎?Mysql。以月爲單位的日期差異
$qb ->select("pj,DATE_DIFF(CURRENT_TIME(), pj.date) as dt)
->from("PrevJbs", "pj");
有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");
這很容易以天計算。
但在幾個月......我們可以有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");
我是正確的思維,你只想列出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();