我认为案例陈述不会过滤记录。开发人员坚持认为它确实......
我想限制具有日期范围的记录数,但此代码不会这样做。
declare @ClientId [int],
@EventStartDate DateTime,
@EventEndDate DateTime
set @ClientId = 1
set @EventStartDate = '2016-05-23'
set @EventEndDate = '2016-09-08'
SELECT
[CalendarEventId], [ClientId],
[EventDate],
[Title],
[EventText],
[CreatedBy], [CreatedDate],
[ModifiedBy], [ModifiedDate],
CASE
WHEN [EventDate] >= @EventStartDate
AND EventDate <= @EventEndDate
THEN 'ACTIVE'
ELSE 'NOT ACTIVE'
END AS [STATUS]
FROM
[dbo].[CalendarEvent]
WHERE
ClientId = @ClientId
ORDER BY
EventDate
答案 0 :(得分:4)
你断言代码没有在日期过滤是正确的,你的朋友说错了。
如果您想要按日期范围进行过滤,则需要将where
子句更改为:
WHERE ClientId = @ClientId
AND EventDate >= @EventStartDate
AND EventDate <= @EventEndDate
查询中唯一的case
表达式是有条件地设置结果集中列的输出。
答案 1 :(得分:0)
我们也可以使用BETWEEN,它也很简单,只是提供替代方案,虽然你可以使用任何两个返回相同的结果:
FROM [dbo].[CalendarEvent]
WHERE ClientId = @ClientId
AND EventDate BETWEEN @EventStartDate AND @EventEndDate
ORDER BY EventDate