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

使用DATEPART筛选≥2021的记录却返回2019、2020数据?原因何在?

问题原因分析

你的WHERE子句存在一个关键逻辑错误:DATEPART(year, 2021) 的写法不符合预期。

DATEPART 函数的第二个参数要求是日期/时间类型,但你直接传入了整数2021,SQL Server会自动将这个整数隐式转换为DATETIME类型。转换规则是:整数代表从1900-01-01开始计算的天数,2021天对应的日期是1905-06-16,因此DATEPART(year, 2021)实际返回的是1905。

这就导致你的WHERE条件等价于:

DATEPART(year, Cast(ss.[dateTime] as date)) >= 1905

显然所有年份大于等于1905的记录都会被筛选出来,自然包含2019、2020年的数据。

正确写法示例

直接比较年份值

select top 10 DATEPART(year, ss.[dateTime]) 
from states ss
where DATEPART(year, ss.[dateTime]) >= 2021

更高效的写法(支持索引使用)

如果dateTime列有索引,建议用范围查询避免函数包裹列,这样能利用索引提升性能:

select top 10 DATEPART(year, ss.[dateTime]) 
from states ss
where ss.[dateTime] >= '2021-01-01'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:48:23