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

如何将SQL查询中in_date的结束日期默认设为上周最后一日?

如何配置SQL查询使in_date的结束日期以上一周最后一天为基准

根据需求,需要动态将查询的结束日期设为上一周(周一至周日)的最后一天的23:59:59,起始日期固定为'2020-01-01 00:00:00'。以下是主流数据库的实现方案:

MySQL 实现

通过DATE_SUB和DAYOFWEEK函数计算上上周日(即目标结束日期):

SELECT ga.in_date
FROM in_txn ga
LEFT JOIN cntr_mst cm ON cm.cntr_num = ga.cntr_num
WHERE status_active = 'A'
  AND in_date BETWEEN '2020-01-01 00:00:00' 
                  AND CONCAT(
                      DATE_SUB(DATE_SUB(CURDATE(), INTERVAL DAYOFWEEK(CURDATE())-1 DAY), INTERVAL 7 DAY),
                      ' 23:59:59'
                  )

逻辑说明:

  • DAYOFWEEK(CURDATE())-1计算当前日期到上一个周日的天数,减去后得到上一个周日
  • 再减7天,得到上一周的周日(即用户示例中2023-04-16)
  • 拼接23:59:59得到完整的结束时间点

SQL Server 实现

使用DATEADD和DATEPART函数计算目标日期:

SELECT ga.in_date
FROM in_txn ga
LEFT JOIN cntr_mst cm ON cm.cntr_num = ga.cntr_num
WHERE status_active = 'A'
  AND in_date BETWEEN '2020-01-01 00:00:00' 
                  AND CONVERT(VARCHAR(19), 
                      DATEADD(day, -7, DATEADD(day, -(DATEPART(weekday, GETDATE())-1), GETDATE())),
                      120
                  )

逻辑说明:

  • DATEADD(day, -(DATEPART(weekday, GETDATE())-1), GETDATE())得到上一个周日
  • 减7天得到上一周的周日
  • CONVERT函数将日期格式化为YYYY-MM-DD HH:MI:SS格式

PostgreSQL 实现

借助date_trunc函数定位周起始,再计算目标日期:

SELECT ga.in_date
FROM in_txn ga
LEFT JOIN cntr_mst cm ON cm.cntr_num = ga.cntr_num
WHERE status_active = 'A'
  AND in_date BETWEEN '2020-01-01 00:00:00' 
                  AND (date_trunc('week', current_date) - interval '8 days') + interval '23 hours 59 minutes 59 seconds'

逻辑说明:

  • date_trunc('week', current_date)得到当前周的周一(PostgreSQL默认周起始为周一)
  • 减8天得到上一周的周日
  • 加上23:59:59的时间偏移,得到完整结束时间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 20:33:13