Syntax Error: line 0, col 152: Error: Expected =, <, <=, <>, >, >=, !=, got 'BETWEEN'

Syntax Error: line 0, col 152: Error: Expected =, <, <=, <>, >, >=, !=, got 'BETWEEN'

当我尝试以下代码时:

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 =, <, <=, <>, >, >=, !=, 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;

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

我正在使用 Symfony 4.4。 SQL 我的数据库服务器。

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

You may try to change the BETWEEN condition with ->andWhere('(e.year * 100 + e.week_number) >= :startDate') and ->andWhere('(e.year * 100 + e.week_number) <= :endDate')

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