需要帮助使用 DATEADD 仅显示当前日期之后的列日期
Needing help using DATEADD to only display column dates after current date
目前正在编写查询以提取员工周年纪念日。到目前为止,我可以提取 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;
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
比较每个周年纪念日,仅当周年纪念日晚于当前日期时才显示。
SELECT 语句是解决方案。如果日期已过,字段将 return 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
目前正在编写查询以提取员工周年纪念日。到目前为止,我可以提取 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;
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
比较每个周年纪念日,仅当周年纪念日晚于当前日期时才显示。
SELECT 语句是解决方案。如果日期已过,字段将 return 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