需要使用DATEADD来帮助仅显示当前日期之后的列日期

问题描述 投票:0回答:2

目前正在编写一个查询来拉动员工周年纪念日到目前为止,我能够拉出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;
sql sql-server date dateadd
2个回答
1
投票
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

使用上述案例陈述应该有效,具体取决于员工已经过周年纪念日时要为这些列显示的值。如果您想在这些情况下获得特定值,则可能需要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
投票

比较每个周年纪念日,仅显示周年日期是否在当前日期之后。

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
© www.soinside.com 2019 - 2024. All rights reserved.