Получить данные с диапазоном дат в текущем месяце - PullRequest
0 голосов
/ 19 сентября 2019

У меня есть эта таблица Event, в которой есть startDate и endDate столбцы

Я хочу получать только события, происходящие в текущем месяце.

Если у меня естьсобытие с 29 августа 2019 года по 1 сентября 2019 года, и я хочу получить все события сентября, это событие должно быть в результате.(это событие также должно появиться в результатах августа)

Кроме того, рассмотрим, когда событие пересекает другой год.

Я пробовал этот запрос:

SELECT EventTitle AS 'Event Name'
    ,CompleteAddress AS 'Location'
    ,UserId AS 'Event Creator'
FROM Event
WHERE
Month(StartDate) = Month(getdate()) 
AND Year(StartDate) = Year(getdate()) 

Но это учитывает толькодата начала.

Ответы [ 4 ]

3 голосов
/ 19 сентября 2019

Если вы хотите, чтобы события были активными в конкретном месяце (независимо от того, когда они начинаются или заканчиваются), вы хотите, чтобы события, в которых дата начала предшествовала началу следующего месяца, а дата окончания была в начале или после началажелаемый месяц:

DECLARE @MonthStart date = '20190901';

SELECT *
FROM dbo.[Event] E
WHERE E.StartDate < DATEADD(DAY, 1, EOMONTH(@MonthStart))
  AND E.EndDate >= @MonthStart;

DB <> Fiddle

0 голосов
/ 19 сентября 2019

Вы пытаетесь использовать мои условия:

WHERE
Month(StartDate) <= Month(getdate()) AND YEAR(StartDate) <= YEAR(getdate()) 
AND (
    (Month(EndDate) >= Month(getdate()) AND YEAR(EndDate) >= YEAR(getdate()) )
    OR EndDate IS NULL
)
0 голосов
/ 19 сентября 2019

Установите переменные для запуска:

  declare @startMonth date = Dateadd(day, -datepart(day, getdate())+1, getdate());
  declare @endMonth date = Dateadd(month, 1, @startMonth);

Ваше предложение WHERE может выглядеть следующим образом:

 where (startdate < @startMonth and enddate > @endMonth) -- month completely contained by dates
or startdate < @endMonth and enddate > @endMonth) -- starts in the month and ends after
or startdate < @startmonth and enddate > @startmonth) -- starts before the month and ends in it
or startdate > @startmonth and enddate < @endMonth) -- starts and ends in the month

Возможно, вы также можете выполнить некоторую оптимизацию, ноэто объясняет, что он делает.

0 голосов
/ 19 сентября 2019

Вы должны определить первый и последний день для вашего запроса:

  • DATEADD (DAY, 1, EOMONTH (StartDate, -1)) isпервый день месяца

  • EOMONTH (StartDate) - последний день месяца

DECLARE @Date date = '20190901';

SELECT 
    EventTitle AS 'Event Name',
    CompleteAddress AS 'Location',
    UserId AS 'Event Creator'
FROM Event
WHERE StartDate BETWEEN DATEADD(DAY, 1, EOMONTH(@Date, -1)) AND EOMONTH(@Date)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...