【问题标题】:Mysql. date difference in monthsmysql。以月为单位的日期差异
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      【解决方案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");
      

      【讨论】:

        【解决方案3】:

        您是否只想列出除 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();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-02-15
          • 1970-01-01
          • 2011-04-19
          • 1970-01-01
          • 2015-12-19
          • 2011-02-16
          相关资源
          最近更新 更多