如何在SQL中使用变量按指定日期查询记录
解决按日期变量查询datetime类型记录的问题
你当前的代码直接用Estt_Date=@estDate查不到数据,核心原因是datetime类型包含年月日时分秒毫秒,只有当Estt_Date和@estDate的时间部分完全一致时才会匹配,但实际场景中我们通常需要查询某一天的所有记录,忽略时分秒。下面提供两种实用解决方案:
方案1:转换日期类型匹配(简单直观)
将Estt_Date转换为DATE类型(仅保留年月日),再与变量的日期值比较:
-- 定义日期变量,指定要查询的目标日期 DECLARE @estDate DATE SET @estDate = '2023-01-31' -- 查询该日期的所有记录 SELECT Meta FROM T_TData WHERE CAST(Estt_Date AS DATE) = @estDate
方案2:日期范围查询(性能更优)
通过指定目标日期的起始和结束时间范围来查询,这种方式能利用Estt_Date字段的索引,适合数据量较大的场景:
-- 定义目标日期的起始、结束时间 DECLARE @estStartDate DATETIME DECLARE @estEndDate DATETIME SET @estStartDate = '2023-01-31 00:00:00.000' -- 目标日期的0点 SET @estEndDate = DATEADD(DAY, 1, @estStartDate) -- 目标日期的次日0点 -- 范围查询:>=起始时间 且 <结束时间 SELECT Meta FROM T_TData WHERE Estt_Date >= @estStartDate AND Estt_Date < @estEndDate
如果要查询当前日期的记录
可以动态生成当天的时间范围:
DECLARE @estStartDate DATETIME DECLARE @estEndDate DATETIME SET @estStartDate = CAST(GETDATE() AS DATE) -- 自动转换为当天0点 SET @estEndDate = DATEADD(DAY, 1, @estStartDate) SELECT Meta FROM T_TData WHERE Estt_Date >= @estStartDate AND Estt_Date < @estEndDate
内容的提问来源于stack exchange,提问作者cr7oo
相关产品推荐
相关产品推荐

