【发布时间】:2015-08-14 03:23:03
【问题描述】:
我正在尝试编写查询以获取日期大于 11 个月或小于 12 个月的所有数据。我尝试了下面的查询,它以天为单位返回日期差异。有什么方法可以查看月份吗??
$qb ->select("pj,DATE_DIFF(CURRENT_TIME(), pj.date) as dt)
->from("PrevJbs", "pj");
【问题讨论】:
标签: php mysql symfony doctrine-orm
我正在尝试编写查询以获取日期大于 11 个月或小于 12 个月的所有数据。我尝试了下面的查询,它以天为单位返回日期差异。有什么方法可以查看月份吗??
$qb ->select("pj,DATE_DIFF(CURRENT_TIME(), pj.date) as dt)
->from("PrevJbs", "pj");
【问题讨论】:
标签: php mysql symfony doctrine-orm
有mysql函数PERIOD_DIFF
这可以更容易,但它操作 PERIODS
$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();
【讨论】: