SQL数据库获取sql中两个日期之间的所有日期

时间:2018-02-08 02:53:16

标签: sql-server tsql stored-procedures

是否有可能获得给定范围之间的所有日期,然后将其与数据库中的数据对齐/绑定?

我目前正在开发一个DTR系统,其中收集员工一天的进/出时间。我想打印范围之间的所有日期并插入打孔时间,如果在白天没有打孔,则会显示一条空白的笔记。

示例:

Date from: 1/1/2018
Date to: 15/1/2018

Output:
Date     | Time in AM |  Time out AM |
1/1/2018 | 8:00 am    |  12:00 am    |
2/1/2018 | 7:50 am    |  12:10 am    |
3/1/2018 | ABSENT     |  ABSENT      |
. . . and so on . . .

提前致谢

这是存储过程

更新

这是架构 schema

这是输出

output

另一个更新

我为AM Time-in / out做的代码就是这个

    DECLARE @AM DATETIME,@AM_MID DATETIME,@AM_OUT DATETIME,@ABSENT NVARCHAR, @Four INt, @IN_AM DATETIME, @OUT_AM DATETIME; 
SET @AM = '12:01:00 AM';
SET @AM_MID = '10:00:00 AM';
SET @AM_OUT = '12:59:59 PM';
SET @IN_AM = '8:00:00 AM';
SET @ABSENT = 'ABSENT';
SET @Four = 4;

Select usrinfo.Name as [Fullname], FORMAT(CONVERT(DATETIME, auth.TransactionTime), 'MM/dd/yyyy') as [Date],

CASE
WHEN max(case when auth.FunctionKey = '1' and FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') <= @AM_MID and FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') >= @AM then FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') end)  IS NULL
THEN '--'
ELSE
 max(case when auth.FunctionKey = '1' and FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') <= @AM_MID and FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') >= @AM then FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') end)
END
as [AM Time-in],

CASE
WHEN min(case when auth.FunctionKey = '2'  and FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') >= @AM_MID and  FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') <= @AM_OUT  then FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') end) IS NULL
THEN '--'
ELSE
min(case when auth.FunctionKey = '2'  and FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') >= @AM_MID and  FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') <= @AM_OUT  then FORMAT(CONVERT(DATETIME, auth.TransactionTime, 8),'hh:mm:ss tt') end)
END
as [AM Time-out]



from NGAC_AUTHLOG as auth INNER JOIN
     NGAC_USERINFO as usrinfo ON usrinfo.ID = auth.UserID INNER JOIN
     NGAC_GROUP as grop ON grop.ID = usrinfo.GroupID 

where auth.AuthResult ='0' AND usrinfo.GroupID != '1' 

group by FORMAT(CONVERT(DATETIME, auth.TransactionTime), 'MM/dd/yyyy'),usrinfo.Name,  usrinfo.ID, usrinfo.Description, grop.Description
order by FORMAT(CONVERT(DATETIME, auth.TransactionTime), 'MM/dd/yyyy') ASC;

代码的作用是我获得了员工的 TransactionTime ,然后根据 IN OUT 对其进行分类它的 FunctionKey 。一旦分类,代码将根据日期识别进/出时间。我面临的问题是我想在给定范围内显示剩余的日期然后分类是否有数据或没有,如果没有则输出到时间输入/输出将< strong>缺席而不是 -

我很抱歉,如果我给你一些麻烦先生。我对这种事情有点新意。

再次感谢帮助先生。

0 个答案:

没有答案