计算员工在职年数时日期相减返回异常值的问题求助
计算员工在职年数时日期相减返回异常值的问题求助
嗨,我来帮你搞定这个计算员工在职年数的问题~
你之前写的SQL写法有问题哦,直接用'now' - HireDate是把字符串和日期当成数值来减,完全不是正确的日期差计算方式,这就是为什么会得到负数的原因。
根据你用的DATE('now')语法,看起来你应该是在使用SQLite数据库?那可以用strftime函数来正确计算在职年数,还要考虑到“还没到当年入职纪念日”的情况(比如员工是2020年5月10日入职,现在是2024年3月,那实际在职年数是3年而不是4年),具体SQL语句如下:
SELECT LastName, HireDate, -- 计算年份差,再根据当前日期是否过了当年入职日调整 strftime('%Y', 'now') - strftime('%Y', HireDate) - CASE WHEN strftime('%m-%d', 'now') < strftime('%m-%d', HireDate) THEN 1 ELSE 0 END AS YearsEmployed FROM employees;
如果是其他数据库的话,也给你补充一下对应的写法:
- MySQL:用
TIMESTAMPDIFF函数直接计算年份差,会自动处理纪念日的问题:SELECT LastName, HireDate, TIMESTAMPDIFF(YEAR, HireDate, CURDATE()) AS YearsEmployed FROM employees; - PostgreSQL:用
AGE函数获取时间间隔,再提取年份:SELECT LastName, HireDate, EXTRACT(YEAR FROM AGE(CURRENT_DATE, HireDate)) AS YearsEmployed FROM employees;
这样就能得到准确的员工在职年数啦~
备注:内容来源于stack exchange,提问作者samss04
相关产品推荐
相关产品推荐

