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

SQL获取过去30天数据正常,获取前30天数据失败?求指导

问题分析与解决

嘿,这问题其实很容易忽略!你写的第二个查询语句里,日期范围的上下限搞反了,导致没有任何数据能满足这个条件。

为什么最近30天的语句有效?

看你第一个查询:

SELECT * FROM [myDB].[dbo].[myTable] 
WHERE [CreatedDate] >= DATEADD(day,-30,GETDATE()) 
  AND [CreatedDate] <= GETDATE()

DATEADD(day,-30,GETDATE()) 会得到当前日期往前推30天的时间点,这个时间点肯定比GETDATE()(当前时间)要早,所以你的条件是找“创建日期在30天前到现在之间”的数据,逻辑完全通顺,自然能查到结果。

第二个语句的错误在哪?

再看你写的第二个查询:

SELECT * FROM [myDB].[dbo].[myTable] 
WHERE [CreatedDate] >= DATEADD(day,-30,GETDATE()) 
  AND [CreatedDate] <= DATEADD(day,-60,GETDATE())

这里DATEADD(day,-30,GETDATE())是30天前,DATEADD(day,-60,GETDATE())是60天前——60天前显然比30天更早(比如今天是2024-05-10,30天前是2024-04-10,60天前是2024-03-11)。你的条件变成了“创建日期既要晚于30天前,又要早于60天前”,这根本不可能有数据满足,所以查询自然没有结果。

正确的写法

只需要把两个日期条件的上下限调换位置,或者调整比较运算符的方向就行:

-- 方法1:调换DATEADD的位置,保持>=和<=的逻辑
SELECT * FROM [myDB].[dbo].[myTable] 
WHERE [CreatedDate] >= DATEADD(day,-60,GETDATE()) 
  AND [CreatedDate] <= DATEADD(day,-30,GETDATE())

-- 方法2:调换比较运算符,保持DATEADD的顺序
SELECT * FROM [myDB].[dbo].[myTable] 
WHERE [CreatedDate] <= DATEADD(day,-30,GETDATE()) 
  AND [CreatedDate] >= DATEADD(day,-60,GETDATE())

这样就会查询到60天前到30天前之间的历史数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:38