Как рассчитать дату и время на Sql сервере - PullRequest
0 голосов
/ 04 августа 2020

У меня есть особый оператор выбора, с которым мне нужна помощь.

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

Проблема в том, что после AND в предложении WHERE синтаксис 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)

Тогда, если произойдет событие в 11:00 20/08/2020, то есть за 16 дней до написания этого сообщения и второго, где предложение реализовано, то в любой день до 20-го числа событие, предшествующее текущему ВРЕМЕНИ, будет скрыто, что неверно, потому что событие произойдет только 20-го числа ...

Если есть способ сделайте это возможным, может кто-нибудь поможет мне или направит меня в правильном направлении. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 04 августа 2020

Пожалуйста, попробуйте ниже.

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)
...