计算工龄,以年月日形式显示
计算 显示 形式 年月日
2023-09-11 14:21:08 时间
需求,有个入职日期,以年月日形式显示该员工已经入职多久
select case when datediff(year,date,getdate()) > 0 -- 如果当前年份大于入职年份 then case when datepart(month,getdate()) - datepart(month,date)=0 -- 则 判断当前月份数字 与入职月份数字 相同 then case when datepart(day,getdate()) - datepart(day,date)<0 -- 则 判断当前天数字是否 < 入职的天数字 then datediff(year,date,getdate()) - 1 -- 如果是,则证明,虽然当前年份大于入职年份,但月份相同的情况,天数数字比入职时的少,所以年份差 -1 else datediff(year,date,getdate()) -- 如果否,则证明,虽然当前年份大于入职年份,但月份相同的情况,天数数字比入职时的多,所以正常年份差 end when datepart(month,getdate()) - datepart(month,date)<0 -- 二次判断,判断当前月份数字 比 入职月份数字小 then datediff(year,date,getdate()) - 1 --如果是,则年份差 -1 ,比如 2020-08-01 入职,但现在是 2021-06-01,6-8<0,所以它们是没有差一年的,所以2021-2020的年份差需要再-1 else datediff(year,date,getdate()) --如果否,则直接年份差,比如 2020-04-01 入职,但现在是 2021-06-01,6-4>=0,则直接 2021-2020 = 1 即可 end else 0 end as 'year', -- 下述都一样,就不一一赘述,参考上面的年份即可 case when datepart(month,getdate()) - datepart(month,date)=0 then case when datepart(day,getdate()) - datepart(day,date)<0 then datepart(month,getdate())+12 - datepart(month,date) -1 else datepart(month,getdate()) - datepart(month,date) end when datepart(month,getdate()) - datepart(month,date)<0 then case when datepart(day,getdate()) - datepart(day,date)<0 then datepart(month,getdate())+12 - datepart(month,date) -1 else datepart(month,getdate())+12 - datepart(month,date) end else datepart(month,getdate()) - datepart(month,date) end as 'month', case when datepart(day,getdate()) - datepart(day,date)<0 then case when (datepart(month,getdate())-1) in (1,3,5,7,8,10,12) then datepart(day,getdate())+31 - datepart(day,date) else datepart(day,getdate())+30 - datepart(day,date) end else datepart(day,getdate()) - datepart(day,date) end as 'day' from ( select cast('2020-06-12' as datetime) as date union all select cast('2020-08-11' as datetime) union all select cast('2018-06-01' as datetime) union all select cast('2018-05-07' as datetime) union all select cast('2020-12-08' as datetime) union all select cast('2020-11-06' as datetime) union all select cast('2019-09-08' as datetime) ) t
缺陷,还没有包含进闰年,所以在2月的时候,特别是 28-29 29-28 的判断,都会出问题
相关文章
- C语言程序设计100例之(66):计算2的N次方
- Tensorboard教程:显示计算图中节点信息
- python实现单位换算计算
- 科技云报道:云计算走向工业互联网“深水区”
- 科技云报道:2021年,隐私计算进入商业落地元年
- softmax与交叉墒层的实现原理以及梯度计算
- ESP32( IDF平台)+MAX30102 配合Pyqt上位机实现PPG波形显示与心率计算
- vex-table根据时间加载列(动态加载),动态计算显示最后一行
- 《OpenStack云计算实战手册(第2版)》——1.4 安装OpenStack身份认证服务
- 三大研究机构预测:6家公司吃掉80%云计算市场
- SwiftUI 实用小程序之拆分bill计算tax工具 (教程含源码)
- Excel 数据透视表小技巧之 03 将3行转位3列,行列转换基于多重合并计算区域 (教程含数据和解决方案)
- 国产计算框架mindspore在gpu环境下1.3.0版本的分布式计算组件安装 ——(openmpi 和 nccl 的安装,配置,示例代码的运行)
- 云计算与虚拟化是什么关系?支撑与应用
- MQTT协议-CONNECT报文剩余长度计算
- 【转载】子网划分,主机号,网络号计算