查找即将过生日的员工

在企业或组织中,了解员工的生日并及时送上祝福是一种常见的员工关怀方式。通过数据库查询,可以轻松地找出即将过生日的员工。本文将介绍如何使用SQL查询来实现这一功能。

创建测试数据

首先,需要创建一个表变量来存储测试数据。这个表变量将包含员工的姓名和出生日期。

DECLARE @Workers TABLE (WorkerName VARCHAR(50), DOB DATETIME); INSERT INTO @Workers VALUES ('Ryan', '1972-08-24 00:00:00'); INSERT INTO @Workers VALUES ('James', '1985-09-26 00:00:00'); INSERT INTO @Workers VALUES ('Jasson', '1983-08-25 00:00:00'); INSERT INTO @Workers VALUES ('Tara', '1991-09-24 00:00:00'); INSERT INTO @Workers VALUES ('William', '1992-08-19 00:00:00'); INSERT INTO @Workers VALUES ('Judy', '1989-09-23 00:00:00');

在这个例子中,创建了一个名为@Workers的表变量,并插入了一些测试数据。每个员工都有唯一的姓名和出生日期。

接下来,需要编写一个查询来找出未来几天内即将过生日的员工。可以通过比较当前日期和员工的出生日期来实现这一功能。

DECLARE @InNextDays INT; SET @InNextDays = 3; SELECT * FROM @Workers WHERE 1 = CASE WHEN MONTH(GETDATE()) < MONTH(GETDATE() + @InNextDays) THEN CASE WHEN MONTH(DOB) = MONTH(GETDATE() + @InNextDays) AND DAY(DOB) BETWEEN DAY(DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0)) + 1) AND DAY(GETDATE() + @InNextDays) THEN 1 WHEN MONTH(DOB) = MONTH(GETDATE()) AND DAY(DOB) BETWEEN DAY(GETDATE()) + 1 AND DAY(GETDATE() + @InNextDays) THEN 1 ELSE 0 END ELSE CASE WHEN MONTH(DOB) = MONTH(GETDATE()) AND DAY(DOB) BETWEEN DAY(GETDATE()) + 1 AND DAY(GETDATE() + @InNextDays) THEN 1 ELSE 0 END END;

在这个查询中,首先声明了一个名为@InNextDays的变量,用于存储未来几天的天数。然后,使用CASE语句来比较当前日期和员工的出生日期。如果员工的出生日期在未来几天内,那么查询结果将包含这些员工的信息。

查询当前周内过生日的员工

除了查询未来几天内过生日的员工,还可以查询当前周内过生日的员工。这可以通过比较当前日期和员工的出生日期来实现。

SELECT * FROM @Workers WHERE 1 = CASE WHEN MONTH(GETDATE()) < MONTH(DATEADD(WK, DATEDIFF(WK, 0, GETDATE()) + 1, -1)) THEN CASE WHEN MONTH(DOB) = MONTH(GETDATE() + 1) AND DAY(DOB) >= 1 AND DAY(DOB) < DAY(DATEADD(WK, DATEDIFF(WK, 0, GETDATE()) + 1, -1)) THEN 1 WHEN MONTH(DOB) = MONTH(GETDATE()) AND DAY(DOB) >= DAY(GETDATE()) AND DAY(DOB) <= DAY(DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, GETDATE()), 0))) THEN 1 ELSE 0 END ELSE CASE WHEN MONTH(DOB) = MONTH(GETDATE()) AND DAY(DOB) >= DAY(GETDATE()) + 1 AND DAY(DOB) < DAY(DATEADD(WK, DATEDIFF(WK, 0, GETDATE()) + 1, -1)) THEN 1 ELSE 0 END END;
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485