Sql 无法计算如何显示工作年限(包括少于4年)

Sql 无法计算如何显示工作年限(包括少于4年),sql,sqlyog,Sql,Sqlyog,我现在有这个问题,我正试图找出如何修复在查询的最后四(4)年中加入的问题。任何帮助都将不胜感激。谢谢 问题: 列出在过去四(4)年中加入的所有女性医生,这些医生目前是诊所的在职医生。显示医生及其主管的姓名 当前查询: SELECT CONCAT(d.given, d.surname) AS Doctor_Name, CONCAT(s.given, s.surname) AS Supervisor_Name FROM doctor d, doctor s WHERE s.doctorid =

我现在有这个问题,我正试图找出如何修复在查询的最后四(4)年中加入的问题。任何帮助都将不胜感激。谢谢

问题: 列出在过去四(4)年中加入的所有女性医生,这些医生目前是诊所的在职医生。显示医生及其主管的姓名

当前查询:

SELECT  CONCAT(d.given, d.surname) AS Doctor_Name, 
CONCAT(s.given, s.surname) AS Supervisor_Name
FROM doctor d, doctor s
WHERE s.doctorid = d.supervisorid 
AND d.resigned IS NULL 
AND d.sex = 'f' 
AND YEAR(d.joined) > 2013
选择2

SELECT CONCAT(doc.given,' ',doc.surname) AS Doctor_Name, 
CONCAT(sup.given,' ',sup.surname) AS Supervisor_Name,
doc.sex, 
doc.joined
FROM doctor doc, doctor sup
WHERE sup.doctorid = doc.supervisorid 
AND doc.resigned IS NULL 
AND doc.sex = 'F' 
AND YEAR (doc.joined) >= YEAR(CURRENT_DATE - INTERVAL 4 YEAR)
ORDER BY doc.joined
选择
CONCAT(d.given,d.姓氏)作为医生的名字,
CONCAT(s.给定,s.姓氏)作为主管
来自d医生
加入s博士
关于s.doctorid=d.supervisorid
哪里
d、 辞职无效
d.sex='f'
和DATEDIFF(年份,d.join,GETDATE())<4
所以这里的重点是

DATEDIFF(YEAR,d.joined,GETDATE()) < 4
DATEDIFF(年份,d.join,GETDATE())<4
将从GETDATE()中减去d.joined的年份,因此如果joined为2015-01-01,GETDATE()返回2017-01-01,则结果将为2。 如果你想从现在起4年,你必须这样做

DATEDIFF(DAY,d.joined, GETDATE()) < 4*365
DATEDIFF(DAY,d.join,GETDATE())<4*365

这大致是正确的,但如果我们跨越一个世纪的边界,或者如果时间段不是4年,则不能很好地处理闰年。

这些查询以什么方式给出了错误的结果?为什么要删除SQL上的代码格式?
YEAR(Getdate())-YEAR(d.joined)>=4
d.joined>=Dateadd(y,-4,d.joined),但这将为您提供日精度,而不是如上所述的年部分精度。将取决于您需要什么。两个查询都有效。在这里检查一下:也许你的数据并不是你所认为的那样?虽然这可以纠正问题,但最好添加一个快速解释它是如何工作的
DATEDIFF(DAY,d.joined, GETDATE()) < 4*365