【问题标题】:Syntax Error: line 0, col 152: Error: Expected =, <, <=, <>, >, >=, !=, got 'BETWEEN'语法错误:第 0 行,第 152 列:错误:预期 =、<、<=、<>、>、>=、!=,得到 'BETWEEN'
【发布时间】:2021-12-17 14:10:28
【问题描述】:

当我尝试以下代码时:

return $this->createQueryBuilder('e')
    ->select('e.user_id', 'e.year', 'e.week_number', 'e.approved_by')
    ->where('e.user_id = :userID')
    ->andWhere('(e.year * 100 + e.week_number) BETWEEN :startDate and :endDate')
    ->setParameter('userID', $userID)
    ->setParameter('startDate', ($startYear * 100 + $startWeek))
    ->setParameter('endDate', ($endYear * 100 + $endWeek))
    ->getQuery()
    ->getResult()
;

我收到错误[Syntax Error] line 0, col 149: Error: Expected =, &lt;, &lt;=, &lt;&gt;, &gt;, &gt;=, !=, got 'BETWEEN'

如果我打印我的查询,它看起来像这样:

dql: "SELECT e.user_id, e.year, e.week_number, e.approved_by FROM App\Entity\... e WHERE e.user_id = :userID AND ((e.year * 100 + e.week_number) BETWEEN :startDate and :endDate)"

如果我在 SSMS 中使用此查询并将变量替换为实际数据。一切都很好。

我的变量具有以下值:

$startYear = 2021;
$startWeek = 52;
$endYear = 2022;
$endWeek = 05;

// :startDate = 202152;
// :endDate = 202205;

计算可能会破坏查询生成器。主要是因为我做了类似的查询:-&gt;andWhere('e.week_number between :startWeek and :endWeek') 确实有效。我不知道如何解决它们或为什么会发生这种情况。

我正在使用 Symfony 4.4。用于我的数据库的 SQL Server。

【问题讨论】:

  • 您是否有机会使用存储过程而不是此查询生成器?会给你更好的层分离,并会消除这个错误。
  • @SeanLange 我可以在 Symfony 中使用原生 SQL。但是这样我就可以将整个查询放入其中。我感觉查询生成器有问题,所以我想知道其他人是否知道原因或/以及如何在查询生成器中解决此问题。
  • 您可以尝试使用-&gt;andWhere('(e.year * 100 + e.week_number) &gt;= :startDate')-&gt;andWhere('(e.year * 100 + e.week_number) &lt;= :endDate') 更改BETWEEN 条件
  • @Zhorov 你发表评论作为答案吗?所以我可以接受它。

标签: php sql sql-server symfony symfony4


【解决方案1】:

Zhorov 的这条评论解决了我的问题。

您可以尝试使用-&gt;andWhere('(e.year * 100 + e.week_number) &gt;= :startDate')-&gt;andWhere('(e.year * 100 + e.week_number) &lt;= :endDate') 更改BETWEEN 条件

查询构建器无法处理它仍然很奇怪。我的意思是没有太大的变化,SQL Server 本身发现一切都很好。如果有人可以解释这是如何工作的,我可能会投票作为答案。

【讨论】:

    猜你喜欢
    • 2017-12-08
    • 2014-03-03
    • 2016-11-09
    • 2018-12-18
    • 2019-01-24
    • 2019-12-20
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多