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

技术求助:获取CRM中2022年第36周全周活动列表(DATEADD函数异常)

查询2022年第36周全部活动的正确方案

你之前用DATEADD(week, 36, '2022')只能返回第36周的起始日数据,因为这个函数仅生成单一天的日期,而非整周范围。要获取该周所有活动,需要明确周的起始和结束时间,再通过范围条件过滤数据。以下是主流数据库的实现方案:

SQL Server

默认周日为周起始(可通过SET DATEFIRST修改),用日期范围查询:

SELECT *
FROM Customers
WHERE 活动日期 >= DATEADD(week, 36, '2022-01-01')
  AND 活动日期 < DATEADD(week, 37, '2022-01-01');

若需以周一为周起始,先设置参数再查询:

SET DATEFIRST 1; -- 设定周一为每周第一天
SELECT *
FROM Customers
WHERE 活动日期 >= DATEADD(week, 36, '2022-01-01')
  AND 活动日期 < DATEADD(week, 37, '2022-01-01');

MySQL

可直接通过周数匹配,或用日期范围:

  • 按周数查询(第二个参数1表示周一为周起始,0为周日):
SELECT *
FROM Customers
WHERE YEAR(活动日期) = 2022
  AND WEEK(活动日期, 1) = 36;
  • 日期范围方式:
SELECT *
FROM Customers
WHERE 活动日期 >= STR_TO_DATE('2022 36 Monday', '%X %V %W')
  AND 活动日期 < STR_TO_DATE('2022 37 Monday', '%X %V %W');

PostgreSQL

PostgreSQL默认周一为周起始,两种查询方式:

  • 按周数提取:
SELECT *
FROM Customers
WHERE EXTRACT(YEAR FROM 活动日期) = 2022
  AND EXTRACT(WEEK FROM 活动日期) = 36;
  • 日期范围方式:
SELECT *
FROM Customers
WHERE 活动日期 >= DATE_TRUNC('week', '2022-01-01'::DATE + INTERVAL '35 weeks')
  AND 活动日期 < DATE_TRUNC('week', '2022-01-01'::DATE + INTERVAL '36 weeks');

注意事项

  • 不同数据库对“周”的定义存在差异(如起始日、第一周判定规则),需根据实际数据库配置调整。
  • 优先使用日期范围查询(>= + <),这种方式能利用日期字段的索引,查询效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:10:24