Динамическая дата в предложении WHERE зависит от текущей даты - PullRequest
1 голос
/ 17 апреля 2019

Возможно ли сделать дату в предложении WHERE динамической, чтобы, если текущая дата (GETDATE()?) Была меньше, чем 1 июля (7/1) текущего года ( о том, когда GETDATE() выполняется), тогда сделайте дату в предложении WHERE равной 7/1 от предыдущего года. Если текущая дата больше, чем 7/1 текущего года, тогда укажите в пункте WHERE дату 7/1 текущего года. Вот несколько примеров.

   --EXAMPLE 1:
        GETDATE() = 4/17/19

        SELECT A.DATE
        FROM TEST_TABLE A
        WHERE A.DATE >'2018-07-01'  <-- This would be dynamic based on the current date being less than 7/1 of this year, so use previous year.

   --EXAMPLE 2:

       GETDATE() = 7/2/19

       SELECT A.DATE
       FROM TEST_TABLE A
       WHERE A.DATE > '2019-07-01' <-- 2019 Because current date is greater than 7/1 of current year we use the current year.

Я буду использовать это в представлении, поэтому я не верю, что могу объявлять и использовать переменные, поэтому я ищу другие варианты.

1 Ответ

1 голос
/ 17 апреля 2019

Способ сделать это без оператора case / else:

CONCAT(Year(DATEADD(month, -6, GETDATE())), '/07/01')

Это вычитает 6 месяцев из текущей даты (DATEADD(month, -6, GETDATE())), берет только год этой новой даты (Year(...)) и добавляет /07/01 к концу (CONCAT(..., '/07/01')).

Примеры:

SELECT CONCAT(Year(DATEADD(month, -6, '2017/06/30')), '/07/01'); выходы 2016/07/01

и

SELECT CONCAT(Year(DATEADD(month, -6, '2017/07/01')), '/07/01'); выходы 2017/07/01

Используется в контексте:

SELECT A.DATE
       FROM TEST_TABLE A
       WHERE A.DATE > CONCAT(Year(DATEADD(month, -6, GETDATE())), '/07/01');
...