源数据表
序号 | 姓名 | 合同签订日期 |
1 | 辛劭钧 | 2010/1/14 |
2 | 林庆荣 | 2009/10/19 |
3 | 许亚瑾 | 2010/1/14 |
4 | 施佳翔 | 2008/12/20 |
5 | 钟皓宇 | 2010/7/10 |
6 | 李志仁 | 2008/3/5 |
7 | 杨婉伶 | 2008/2/5 |
8 | 林艺芳 | 2008/4/6 |
9 | 陈俐宁 | 2009/11/15 |
10 | 李冠霆 | 2009/12/8 |
11 | 吕柏贤 | 2010/6/22 |
12 | 杜金佳 | 2010/1/14 |
13 | 林映君 | 2009/11/15 |
14 | 陈柏勋 | 2009/12/8 |
15 | 陈怡瑄 | 2010/1/14 |
16 | 叶羽恬 | 2009/9/15 |
17 | 王介廷 | 2009/9/25 |
18 | 穆彦浚 | 2008/4/8 |
19 | 洪亚菁 | 2010/3/5 |
20 | 吴宗隆 | 2008/3/5 |
21 | 余思宜 | 2010/7/20 |
22 | 邱建霖 | 2008/1/5 |
23 | 黄译庆 | 2010/3/5 |
24 | 周逸宣 | 2010/6/22 |
25 | 梁殷铨 | 2009/10/31 |
26 | 李晏庭 | 2009/10/18 |
27 | 曹贤德 | 2009/11/15 |
28 | 张政 | 2010/7/2 |
29 | 杨智玮 | 2009/10/20 |
某公司实行3年合同制,同时对合同到期前的员工实施合同期综合评价,以决定员晋升、加薪、续签合同乃至解除合同。为准备评价的相关资料,人力资源部需要提前30天将合同即将到期员工清单分发给各部门负责人,并且需要在合同到期前决定是否续签。由于合同到期日可能为双休日.因而需要确定合同到期前最后一个工作日为最迟续订期限。员工签订合同时间表如图所示,根据员工签订合同时间表返回合同到期前一个月的员工清单及最迟续订期限。
解决方案
SELECT
序号,
姓名,
DATEADD('yyyy',3,合同签订日期)-FORMAT(WEEKDAY(DATEADD('yyyy',3,合同签订日期),2)-5,'0;\0') AS 合同续订日期
FROM [sheet1$]
WHERE DATEDIFF('d',DATE(),DATEADD('yyyy',3,合同签订日期))
BETWEEN 0 AND 30
利用DATEADD函数编写以下语句,可以获得员工合同到期日:
DATEADD('yyyy',3,合同签订日期)
根据该合同到期日,利用DATEDIFF函数可以求得指定日期距合同到期日的天数,保留该天数为0~30的记录,即可求得本例要求的合同即将到期的员工。
由于星期六和星期日为休息日,故无法进行合同签订工作。为求得最迟续订期限,本例还应将合同到期日为星期六和星期日的日期转换成星期五的日期,该日期即为最迟续订期限.
(WEEKDAY(DATEADD('yyyy',3,合同签订日期),2)
本例的实现需要将星期六和星期日变更为前一个工作日(即星期五)。因而需要将合同到期日为星期六和星期日的日期分别提前1天和2天,即减去1和2,其余日期不做变化,即减
去0。因而,利用FORMAT函数将上述星期天数结果中的星期六和星期日保留为1和2,其余保留为0。即利用以下语句得到合同续订日期:
DATEADD('yyyy',3,合同签订日期)-FORMAT(WEEKDAY(DATEADD('yyyy',3,合同签订日期),2)-5,'0;\0')