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 服务器本身发现一切都很好。如果有人可以解释这是如何工作的,我可能会将其投票为答案。
当我尝试以下代码时:
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 服务器本身发现一切都很好。如果有人可以解释这是如何工作的,我可能会将其投票为答案。