sql - 在 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
当我搜索比下一年日期更少甚至更少的条目时,我会得到正确的结果。为什么它会这样工作?
解决方案
如果您想要今天 18 岁或以上的人,那么今天休假 18 年,不要在 DoB 列中添加年份,因为这会使查询不可 SARGable:
SELECT birth_date
FROM dbo.YourTable
WHERE birth_date <= DATEADD(YEAR, -18, CONVERT(date,GETDATE()));
推荐阅读
- cloudflare - Cloudflare 为 API 调用增加了太多延迟
- mongodb - 如何按 id 删除嵌套集合中的项目 - mongoose
- zoom-sdk - Zoom 的 API 或 SDK 是否允许更改参与者的视频缩略图?
- mysql - Handshake inactivity timeout - mysql using sqltools
- drawing - 如何绘制正确显示键角的多环芳烃的子结构?
- swift - 如何在 SwiftUI 中添加图形 x 轴标签
- qml - 如何确定在 QML TreeView 中选择了哪个/是否选择了项目
- mysql - 外部数据库的 Spring Cloud Data Flow Kubernetes 部署失败 - 无法加载驱动程序类:com.mysql.cj.jdbc.Driver
- zsh - 我如何总是忽略 ZSH 完成中的模式?
- c - 矩阵向量乘法应该一直运行到目标执行时间