Нужна помощь с использованием DATEADD для отображения только даты столбца после текущей даты - PullRequest
0 голосов
/ 29 марта 2019

в настоящее время пишет запрос для получения дат годовщины сотрудников.до сих пор я могу установить даты на 5, 10, 15 и 25 лет, но я пытаюсь установить даты для каждой годовщины после текущей.есть идеи?

SELECT
    HireDate, 
    DATEADD(year, 5, HireDate)  AS '5_Year_Anniversary',
    DATEADD(year, 10, HireDate) AS '10_Year_Anniversary',
    DATEADD(year, 15, HireDate) AS '15_Year_Anniversary',
    DATEADD(year, 25, HireDate) AS '25_Year_Anniversary'
FROM
    EMPTABLE;

Ответы [ 2 ]

1 голос
/ 29 марта 2019
SELECT
    HireDate, 
    case when DATEADD(year, 5, HireDate) >= getdate() --check to see if the anniversary is on or after the current date
         then DATEADD(year, 5, HireDate) 
         else NULL end  AS '5_Year_Anniversary' --etc, repeat for your other columns
FROM
    EMPTABLE
where DATEADD(year, 25, HireDate) >= getdate() --to filter out employees where all anniversary columns would be NULL

Использование оператора case, как указано выше, должно работать, в зависимости от того, какое значение вы хотите отобразить для этих столбцов, когда сотрудник уже прошел свою годовщину.Вам может понадобиться cast / convert дата вашей годовщины, если вы хотите конкретное значение в этих случаях.

Например:

SELECT
    HireDate, 
    case when DATEADD(year, 5, HireDate) >= getdate() --check to see if the anniversary is on or after the current date
         then cast(DATEADD(year, 5, HireDate)  as varchar(20))
         else 'Already Passed' end  AS '5_Year_Anniversary' --etc, repeat for your other columns
FROM
    EMPTABLE
where DATEADD(year, 25, HireDate) >= getdate() --to filter out employees where all anniversary columns would be NULL
0 голосов
/ 29 марта 2019

Сравните каждую годовщину и показывает только, если дата годовщины следует за текущей датой.

Оператор SELECT является решением. Поле вернет NULL, если дата прошла.

CREATE TABLE #EMPTABLE
(
    HireDate datetime
)
GO

INSERT INTO #EMPTABLE
VALUES
    ('2018-01-01'),
    ('2013-01-01'),
    ('2008-01-01'),
    ('2003-01-01'),
    ('1993-01-01')
GO


SELECT
    GETDATE() [Current Date],
    HireDate, 
    CASE WHEN ( DATEADD(year, 5, HireDate) > GETDATE() )
        THEN DATEADD(year, 5, HireDate)
        ELSE NULL
    END AS [5_Year_Anniversary],
    CASE WHEN ( DATEADD(year, 10, HireDate) > GETDATE() )
        THEN DATEADD(year, 10, HireDate)
        ELSE NULL
    END AS [10_Year_Anniversary],
    CASE WHEN ( DATEADD(year, 15, HireDate) > GETDATE() )
        THEN DATEADD(year, 15, HireDate)
        ELSE NULL
    END AS [15_Year_Anniversary],
    CASE WHEN ( DATEADD(year, 25, HireDate) > GETDATE() )
        THEN DATEADD(year, 25, HireDate)
        ELSE NULL
    END AS [25_Year_Anniversary]
FROM
    #EMPTABLE
GO
...