SQL Server 2005单日期查询正常,需修改为支持起止日期范围查询
实现SQL Server 2005的起止日期范围查询
嘿,我来帮你把单日期查询改成支持起止日期范围的版本!针对你的CheckInOut表结构,我们只需要调整WHERE子句的日期条件就能轻松实现需求。
先看你原来的单日期查询(假设是这样)
通常单日期查询可能是类似下面的写法,指定一个固定日期:
SELECT TR, BadgeNum, USERID, Dated, Time, CHECKTYPE FROM CheckInOut WHERE Dated = '2018-04-01'
修改为起止日期范围查询
我们可以用参数化变量来接收起止日期,这样更灵活也更安全(避免SQL注入)。这里推荐用>=和<的组合来处理日期范围,能完美兼容带时间部分的datetime字段:
-- 定义起止日期变量 DECLARE @StartDate DATETIME, @EndDate DATETIME SET @StartDate = '2018-04-01' -- 起始日期 SET @EndDate = '2018-04-03' -- 结束日期 -- 查询范围内的数据 SELECT TR, BadgeNum, USERID, Dated, Time, CHECKTYPE FROM CheckInOut WHERE Dated >= @StartDate AND Dated < DATEADD(DAY, 1, @EndDate)
为什么用DATEADD(DAY, 1, @EndDate)?
你的Dated字段是datetime类型(比如2018-04-01 00:00:00.000),如果直接用Dated <= @EndDate,会漏掉@EndDate当天非0点的记录。用DATEADD给结束日期加1天,再用<比较,就能包含结束日期当天的所有时间点数据。
如果是写死日期的场景
如果你不需要变量,直接写固定日期范围也可以:
SELECT TR, BadgeNum, USERID, Dated, Time, CHECKTYPE FROM CheckInOut WHERE Dated >= '2018-04-01' AND Dated < '2018-04-04' -- 结束日期+1天
这个写法在SQL Server 2005上完全兼容,你可以直接套用在你的现有查询里替换原来的单日期条件就行!
内容的提问来源于stack exchange,提问作者Waqar Yousufzai
相关产品推荐
相关产品推荐

