首页 > 解决方案 > 如何在 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 日举行......

如果有办法使这成为可能,有人可以帮助我或指导我正确的方向。任何帮助将不胜感激。

标签: sql-serverstored-procedures

解决方案


请在下面尝试。

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)

推荐阅读