sql-server - 如何在 Sql Server 中计算日期时间
问题描述
我有一个非常特殊的选择语句需要帮助。
CREATE PROCEDURE [dbo].[sp_GetLeaderEvents]
@ILCode nvarchar(20)
AS
BEGIN
SELECT EventID,EventName,EventDate,EventTime,EventSeatCount,EventILCode
FROM tblEvent
WHERE EventILCode = @ILCode AND (CAST(EventDate + EventTime AS TheEventDateTime) AS datetime) >= CAST(GETDATE() AS datetime)
END
问题是在 WHERE 子句中的 AND 之后,sql 语法不正确,但我已经以可以清楚地表明我正在尝试做什么的格式编写它。我已将 EventDate 和 EventTime 分成 EventTable 中的两个不同列。我正在尝试过滤掉早于系统当前日期和时间的事件。如果我尝试像这样分别比较 EventTime 和 EventDate:
WHERE EventILCode = @ILCode AND CAST(EventTime AS time) >= CAST(GETDATE() AS time) AND CAST(EventDate AS date) >= CAST(GETDATE() AS date)
然后,如果在 2020 年 8 月 20 日上午 11:00 发生事件,即在撰写本文前 16 天,并且实施了第二个 where 子句,那么在 20 日之前的任何一天,将隐藏早于当前 TIME 的事件这是不正确的,因为该活动只会在 20 日举行......
如果有办法使这成为可能,有人可以帮助我或指导我正确的方向。任何帮助将不胜感激。
解决方案
请在下面尝试。
SELECT EventID,EventName,EventDate,EventTime,EventSeatCount,EventILCode
FROM tblEvent
WHERE EventILCode = @ILCode AND
(CAST(EventDate AS datetime) + CAST(EventTime AS datetime)) >= CAST(GETDATE() AS datetime)
或者
SELECT EventID,EventName,EventDate,EventTime,EventSeatCount,EventILCode
FROM tblEvent
WHERE EventILCode = @ILCode AND
(DATEDIFF(dd, 0,CAST(EventDate AS datetime) ) + CAST(EventTime AS datetime)) >= CAST(GETDATE() AS datetime)