You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在TYPO3 v11.5 Extbase仓库中使用WEEK()等SQL函数

TYPO3 v11.5 Extbase使用WEEK()函数筛选特定周数据的解决方法

直接在WHERE条件中调用WEEK()函数

不需要额外选择周数字段,利用表达式构建器的custom()方法传入SQL函数片段,避免被自动转义:

$queryBuilder = $this->connectionPool->getQueryBuilderForTable($this->getTableName());
$queryBuilder->select('*')
    ->where(
        $queryBuilder->expr()->eq(
            $queryBuilder->expr()->custom('WEEK(myDateTime)'),
            $queryBuilder->createNamedParameter($pWeek, \PDO::PARAM_INT)
        )
    );

custom()方法会保留传入的SQL片段原样,不会添加反引号转义,确保WEEK(myDateTime)能被数据库正确识别并执行计算,再与参数$pWeek做等值匹配。

需要返回周数字段的写法

如果要把周数作为查询结果的一部分返回,使用addSelectLiteral()方法(TYPO3 v10及以上版本支持),该方法专门处理无需转义的SQL表达式:

$queryBuilder = $this->connectionPool->getQueryBuilderForTable($this->getTableName());
$queryBuilder->select('*')
    ->addSelectLiteral('WEEK(myDateTime) AS week')
    ->where(
        $queryBuilder->expr()->eq(
            $queryBuilder->expr()->custom('WEEK(myDateTime)'),
            $queryBuilder->createNamedParameter($pWeek, \PDO::PARAM_INT)
        )
    );

额外提示

  • 不同数据库的WEEK()函数参数逻辑可能有差异(比如MySQL的周计算模式),需根据使用的数据库调整函数写法。
  • 处理跨年周场景时,建议结合年份判断,例如用CONCAT(YEAR(myDateTime), '-', WEEK(myDateTime)),避免周数重复导致的筛选错误。

内容的提问来源于stack exchange,提问作者Doku

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:32:37