我在 SQL Server 中有一个 Timesheet 表,用于存储人员角色
CREATE TABLE [dbo].[TimeSheetTable](
[pk_TimeSheetID] [bigint] IDENTITY(1,1) NOT NULL,
[fk_PersonelID] [int] NOT NULL,
[StartDate] [datetime] NOT NULL,
[EndDate] [datetime] NOT NULL,
[fk_RoleID] [int] NOT NULL,
[Comments] [nvarchar](2000) NULL,
[dateCreated] [datetime] NOT NULL,
[CreatedBy] [int] NULL,
有时,员工可以休假,从 2012 年 10 月 28 日到 2012 年 11 月 2 日,有重叠的月份。在上面的示例中,员工在 10 月有 4 天,在 11 月有 3 天。
我的问题是编写一个查询来计算每个人休假的天数。如果结束日期超过月份,则不应计算在内。
SELECT TOP 1000
sum(DATEDIFF(day,startdate,EndDate))
FROM [db_ASCO_Personel].[dbo].[TimeSheetTable]
where fk_RoleID=51 /* how do I count leave days that over lap between two months*/
第 17 行 11 月有 1 天,12 月有 2 天(总共 3 天假期)。我如何计算每个员工仅 1 个月的休假天数?
TimeSheetID StartDate EndDate RoleID Comments dateCreated CreatedBy
2012 年 8 月 6 日 15 日 2012 年 8 月 7 日 51 03:10.6 NULL 2012 年 8 月 1 日 16 日 2012 年 8 月 2 日 51 03:31.5 NULL 2012 年 11 月 29 日 17 日 2012 年 12 月 3 日 51 51:15.5 NULL