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

如何编写自动适配发布日期的SQL查询,避免硬编码日期?

动态日期SQL查询方案

核心思路

不用硬编码日期,直接利用数据库内置日期函数,根据当前发布日期自动计算数据时间范围:

  • 首次发布:取当前日期往前推10年的所有数据
  • 后续定期发布:结合附图常见的年度周期要求(取截止到上一自然年度末的近10年数据),自动计算区间边界

分数据库实现示例

MySQL/MariaDB

首次发布查询(近10年数据)

SELECT *
FROM your_table
WHERE publish_date >= DATE_SUB(CURDATE(), INTERVAL 10 YEAR);

后续年度发布查询

-- 计算上一年度最后一天
SET @last_year_end = DATE_FORMAT(CURDATE(), '%Y-01-01') - INTERVAL 1 DAY;
-- 计算10年前的起始日期
SET @start_date = DATE_SUB(@last_year_end, INTERVAL 10 YEAR);

SELECT *
FROM your_table
WHERE publish_date BETWEEN @start_date AND @last_year_end;

SQL Server

首次发布查询

SELECT *
FROM your_table
WHERE publish_date >= DATEADD(YEAR, -10, GETDATE());

后续年度发布查询

DECLARE @last_year_end DATE = DATEFROMPARTS(YEAR(GETDATE())-1, 12, 31);
DECLARE @start_date DATE = DATEADD(YEAR, -10, @last_year_end);

SELECT *
FROM your_table
WHERE publish_date BETWEEN @start_date AND @last_year_end;

PostgreSQL

首次发布查询

SELECT *
FROM your_table
WHERE publish_date >= CURRENT_DATE - INTERVAL '10 years';

后续年度发布查询

WITH date_params AS (
    SELECT
        (DATE_TRUNC('year', CURRENT_DATE) - INTERVAL '1 day') AS last_year_end,
        (DATE_TRUNC('year', CURRENT_DATE) - INTERVAL '10 years 1 day') AS start_date
)
SELECT t.*
FROM your_table t
CROSS JOIN date_params dp
WHERE t.publish_date BETWEEN dp.start_date AND dp.last_year_end;

适配其他发布周期

如果附图要求季度/半年发布,只需调整日期计算逻辑:

  • 季度发布:取上一季度末往前推10年
  • 半年发布:取上半年度末往前推10年

以MySQL季度发布为例:

SET @last_quarter_end = LAST_DAY(DATE_SUB(CURDATE(), INTERVAL QUARTER(CURDATE()) QUARTER));
SET @start_date = DATE_SUB(@last_quarter_end, INTERVAL 10 YEAR);

SELECT *
FROM your_table
WHERE publish_date BETWEEN @start_date AND @last_quarter_end;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:35:24