SQL Server中如何比较两个日期?能否将表中日期与当前日期对比?
嘿,这个问题我太熟了!在SQL Server里处理日期对比其实挺直接的,不管是两个存储的日期互比,还是和当前日期对比,都有很成熟的做法,我给你掰扯清楚:
一、两个日期的基础对比 #
SQL Server里的日期类型(比如
datetime
、
datetime2
、
date
这些)支持直接用常规的比较运算符,像
=
、
>
、
<
、
>=
、
<=
、
<>
都能用。举个简单例子,假设你有个表
Projects
,里面有
StartDate
和
EndDate
两个日期列,要找项目开始时间早于结束时间的记录,直接写:
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):只获取当前的年月日(不带时间)
给你几个实用的例子:
- 查找今天之前创建的订单:
SELECT * FROM Orders WHERE OrderDate < GETDATE();
- 查找今天当天的订单(不管下单时间):
SELECT *
FROM Orders