繁体   English   中英

Mysql的。日期差异以月计

[英]Mysql. date difference in months

我正在尝试编写查询以获取日期大于11个月或小于12个月的所有数据。 我已经尝试过下面的查询,它返回以天为单位的日期差异。 我有什么方法可以检查几个月?

$qb ->select("pj,DATE_DIFF(CURRENT_TIME(), pj.date) 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");

有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");

我是否正确地认为您只想列出除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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM