You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL Server中如何比较两个日期?能否将表中日期与当前日期对比?

SQL Server 日期对比实操指南

嘿,这个问题我太熟了!在SQL Server里处理日期对比其实挺直接的,不管是两个存储的日期互比,还是和当前日期对比,都有很成熟的做法,我给你掰扯清楚:

一、两个日期的基础对比

SQL Server里的日期类型(比如datetimedatetime2date这些)支持直接用常规的比较运算符,像=><>=<=<>都能用。举个简单例子,假设你有个表Projects,里面有StartDateEndDate两个日期列,要找项目开始时间早于结束时间的记录,直接写:

SELECT * 
FROM Projects
WHERE StartDate < EndDate;

要是你只需要对比日期部分(忽略时分秒),可以把日期转成date类型再比,这样就不会被时间干扰:

-- 只比较年月日,不管具体几点几分
SELECT * 
FROM Projects
WHERE CAST(StartDate AS DATE) = CAST(EndDate AS DATE);

二、存储日期与当前日期的对比

当然可以实现!SQL Server提供了好几个内置函数来获取当前系统的日期时间,你可以根据需求选:

  • GETDATE():返回当前系统的日期+时间(datetime类型,精度到毫秒)
  • SYSDATETIME():返回更精确的日期时间(datetime2类型,精度到纳秒,适合用datetime2列的场景)
  • CURRENT_TIMESTAMP:和GETDATE()功能完全一致,是ANSI标准写法,兼容性更好
  • CAST(GETDATE() AS DATE):只获取当前的年月日(不带时间)

给你几个实用的例子:

  1. 查找今天之前创建的订单:
SELECT * 
FROM Orders
WHERE OrderDate < GETDATE();
  1. 查找今天当天的订单(不管下单时间):
SELECT * 
FROM Orders
WHERE CAST(OrderDate AS DATE) = CAST(GETDATE() AS DATE);
  1. 查找最近7天内的订单:
SELECT * 
FROM Orders
WHERE OrderDate >= DATEADD(DAY, -7, GETDATE());

小提示

  • 如果你的列是datetime2类型,优先用SYSDATETIME(),精度匹配更合理;
  • 要是需要跨数据库兼容,CURRENT_TIMESTAMP是更好的选择;
  • 对比日期时尽量避免在列上做函数运算(比如CAST(OrderDate AS DATE)),如果数据量很大,可能会影响索引效率——可以考虑把当前日期转成带时间的范围来写,比如WHERE OrderDate >= '2024-05-20' AND OrderDate < '2024-05-21',这样能利用索引。

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

火山引擎 最新活动