查询日期的SQL查询
本文关键字:查询 SQL 日期 | 更新日期: 2023-09-27 18:11:09
我编写了一个SQL查询,用于搜索员工考勤表中缺席的人员。但是我要怎么显示日期呢?我指的是缺勤期的日期。除了日期外,一切正常。我想显示缺席期是哪一天?我无法显示日期。
示例:BadgeNumber - EmployeeName - Absent Date
10042 - Mr. Erik - 2014-07-01
代码:SELECT SMEmployee.BadgeNumber,SMEmployee.EmployeeFullName,SMDepartment.DepartmentName
FROM SMEmployee
LEFT OUTER JOIN SMDepartment
ON SMDepartment.DepartmentID=SMEmployee.DepartmentID
WHERE EmployeeID NOT IN (
SELECT empCheckInOut.USERID
FROM empCheckInOut
WHERE convert(date,CHECKTIME)='2014-07-01')
通常要检查记录是否存在(就像您在这里为考勤所做的那样,检查员工在某一天没有签到/签到),使用LEFT OUTER JOIN并检查WHERE子句中某个字段中的NULL(即,没有找到行的LEFT JOIN)会更有效。
然而,这也不会给你日期。
我假定您想要检查一组日期,这需要通过他们缺席的日期。
因此,可以使用一系列联合的简单查询来获取日期,将其交叉连接到员工表,并将其左连接到empCheckInOut表。这样你就可以把日期写出来了。SELECT SMEmployee.BadgeNumber,SMEmployee.EmployeeFullName,SMDepartment.DepartmentName, subDate.aDate
FROM SMEmployee
CROSS JOIN (SELECT '2014-07-01' AS aDate UNION SELECT '2014-06-30') subDate
LEFT OUTER JOIN SMDepartment
ON SMDepartment.DepartmentID=SMEmployee.DepartmentID
LEFT OUTER JOIN empCheckInOut
ON SMEmployee.EmployeeID = empCheckInOut.USERID
AND convert(date,CHECKTIME) = subDate.aDate
WHERE empCheckInOut.USERID IS NULL
似乎您在'empCheckInOut'表中捕获了员工出现的天数。
您需要构建包含所有日期的临时表,例如1个月,然后减去'empCheckInOut'表中捕获的日期。
。#temp将有06-01-2014,06-02-2014,06-03-2014,…(6月全部30天)
CheckInOut将有06-01-2014,06-03-2014,…(emp在6月2日缺席,所以这里总共捕获了29天的6月)
然后,将其中一个减去另一个,您将得到员工缺席的日期。