Где дата 01/09/?

#sql #tsql

Вопрос:

В моем пункте » где » в данный момент у меня просто есть

 WHERE StartDate <= '09/01/2019 00:0:0'
AND EndDate >= '09/01/2019 00:0:0' 
 

Эта дата является последним событием 01 сентября. Это 2019 год, но с 01/09 этого года будет 2020 год

Мой вопрос в том, могу ли я автоматизировать это предложение where, чтобы мне не приходилось вводить и изменять его вручную каждый год?

Спасибо, Крис

Комментарии:

1. Тип данных столбца?

2. Что — то похожее на YEAR(NOW()) ? Не совсем понимаю, о чем ты спрашиваешь

Ответ №1:

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

 where startdate <= datefromparts(year(dateadd(month, -9, getdate())), 9, 1) and
      enddate >= datefromparts(year(dateadd(month, -9, getdate())), 9, 1)
 

Это вычитает 9 месяцев из текущей даты и использует для этого год. Таким образом, 31 августа был предыдущий год. 1 сентября он «волшебным образом» (ну, художественно) переключается на текущий год.

Комментарии:

1. ИДЕАЛЬНО! Большое вам спасибо!

Ответ №2:

 DECLARE @Date  NVARCHAR(30)

set @Date = CONCAT('01/09/', DATEPART(YEAR,getdate()))

.. WHERE StartDate<= @Date