首页 > 解决方案 > 在 Transact-SQL 中比较日期

问题描述

为什么在这个例子中比较会很奇怪?日期,即生日,是:

1990-03-22
1998-03-20
1990-03-22
2002-12-02
2004-03-18
2004-03-20
2004-03-25 

我正在做这个

WHERE DATEADD(YY, 18, jun.birth_date) >= DATEADD(YY, 1, GETDATE())

我认为,从今天开始,一年内应该切断所有 18 岁以上的人的条目。但它完全相反,这就是我得到的:

2004-03-18
2004-03-20
2004-03-25 

当我搜索比下一年日期更少甚至更少的条目时,我会得到正确的结果。为什么它会这样工作?

标签: sqltsql

解决方案


如果您想要今天 18 岁或以上的人,那么今天休假 18 年,不要在 DoB 列中添加年份,因为这会使查询不可 SARGable:

SELECT birth_date
FROM dbo.YourTable
WHERE birth_date <= DATEADD(YEAR, -18, CONVERT(date,GETDATE()));

推荐阅读