当前位置: 首页 > 面试题库 >

如何在Doctrine2中使用SQL的YEAR(),MONTH()和DAY()?

贺跃
2023-03-14
问题内容

我想执行一个在本机SQL中看起来像这样的查询:

SELECT
    AVG(t.column) AS average_value
FROM
    table t
WHERE
    YEAR(t.timestamp) = 2013 AND
    MONTH(t.timestamp) = 09 AND
    DAY(t.timestamp) = 16 AND
    t.somethingelse LIKE 'somethingelse'
GROUP BY
    t.somethingelse;

如果我想像这样在Doctrine的查询生成器中实现这一点:

$qb = $this->getDoctrine()->createQueryBuilder();
$qb->select('e.column AS average_value')
   ->from('MyBundle:MyEntity', 'e')
   ->where('YEAR(e.timestamp) = 2013')
   ->andWhere('MONTH(e.timestamp) = 09')
   ->andWhere('DAY(e.timestamp) = 16')
   ->andWhere('u.somethingelse LIKE somethingelse')
   ->groupBy('somethingelse');

我收到错误异常

[语法错误]第0行,第63行:错误:预期的已知功能,获取了’YEAR’

如何使用Doctrines查询构建器实现查询?

笔记:

  • 我知道Doctrine的Native SQL。我已经尝试过了,但是这导致了我的生产数据库表和开发数据库表使用不同名称的问题。我想与数据库无关,所以这是没有选择的。
  • 尽管我想使用不可知论的数据库:仅供参考,我正在使用MySQL。
  • 有一种方法可以扩展“教义”以“学习” YEAR()等语句,例如此处所示。但是我正在寻找一种避免包含第三方插件的方法。

问题答案:

您可以添加Doctrine扩展名,以便在Symfony上通过添加以下配置来使用MySql
YEARMONTH语句:

doctrine:
    orm:
        dql:
            string_functions:
                MONTH: DoctrineExtensions\Query\Mysql\Month
                YEAR: DoctrineExtensions\Query\Mysql\Year

现在,您可以在DQL或querybuilder中使用MONTH和YEAR语句。



 类似资料:
  • 问题内容: 如何像SQL查询一样使用函数编写JPA 查询? 当我使用上述模式进行查询时,出现错误:。 问题答案: 如果使用的是EclipseLink(2.1),则可以使用FUNC()函数来调用JPA JPQL规范中未定义的任何数据库函数。 即FUNC(’MONTH’,c_Date) 在JPA 2.1(EclipseLink 2.5)中,FUNCTION语法成为规范的一部分(并替代了EclipseL

  • 问题内容: 给定一个表,该表包含一个名为DateTime类型的字段,并且该值将包含日期和时间元素,我需要创建一个摘要查询,该查询对每个月的事件数进行计数。 分组依据字段的结果类型还必须是带有0时间元素的日期时间,并设置为每月的第一天。 到目前为止,这就是我所拥有的,但是它不是很优雅,我不确定它是否特别有效。 更好的建议,以获得更高的效率或更优雅? 问题答案: 到本月的下限: 输出: 所以试试这个:

  • 问题内容: 我正在尝试做一些非常简单的事情,但是开始意识到Java中的日期有点雷区。我想要的是让三个整数(一年,一个月和一个日期)通过的组创建一些对象,对其进行一些简单的测试(沿着日期B之前的日期A和1990年1月1日之后的行A)将它们传递给对象,然后通过JDBC将其传递给数据库。 一切都非常简单,并且可以使用构造函数正常运行。当然,该构造函数已弃用,我想避免在正在编写的新代码中使用已弃用的调用。

  • 我使用的是MongoDB,我必须在spring数据mongo DB中使用$date的聚合查询。这是我的用户收藏。 现在我必须使用MongoTemplate在spring data mongodb中编写这个查询。我是使用聚合的新手。他们是任何简单的方法来使用它。请帮忙 谢谢你。

  • 问题内容: 如何在编写SQL查询的Linq中使用左联接? 问题答案: 使用Join关键字而不是Left join,并且必须使用“ INTO”关键字和“ DefaultIfEmpty()”方法,因为右表将返回空值。

  • 问题内容: 我有多行数据共享相同的公司ID。 有没有一种方法可以使用SQL Server Management Studio 2005对所有金额进行“总和”,以便为每个公司ID给我一行数据? 例如,我目前有以下数据…… 我想尝试得到的是....... 有没有办法做到这一点? 任何指向我正确方法的建议都很好。 谢谢, 问题答案: