0

我有一种情况,时间跨度将根据飞行员的出生日期计算。

飞行员必须在每 6 个月内获得如此多的时间。我很生气他们不都是1-6月和7-12月,但显然他们必须在出生日期之前做这种事情。

这是一个参考表:

在此处输入图像描述

现在,我需要能够根据每个飞行员的两个时段计算出每个飞行员的所有飞行小时数。例如,我的生日是 10 月 23 日。这意味着我的前 6 个月期间是 11 月 1 日到 4 月底(明年)。我正在寻找有关如何创建参考表的任何想法,以使我能够轻松(或尽可能轻松地)计算特定时间段的飞行小时数。

这是我到目前为止所得到的:

在此处输入图像描述

其中birthMonth 和startYear 一起是一个复合主键。startYear 是期间开始的年份。

birthMonth 是 NVARCHAR(50),startYear 是 Int,其余的是日期。

我的飞行员表将birthDate 作为完整日期,然后飞行经理将能够选择startYear。你怎么看?我应该将出生月份和年份合并到同一个字段中吗?我只是试图制作一个模式,以便轻松汇总特定飞行员半年和年度的飞行小时数。也许我可以将日期分解为不包括年份,然后动态添加?我只是觉得这个设计有我没有想到的缺陷。

编辑:这是我目前正在处理的所有表格: 在此处输入图像描述

4

1 回答 1

2

你真的需要一张桌子吗?

declare @birthday datetime = '2012-01-09'

SELECT  DATEADD(dd,-(DAY(DATEADD(m,1,@birthday))-1),DATEADD(m,1,@birthday)) firstSixMonthStart,
        DATEADD(dd, -DAY(DATEADD(m,1,@birthday)), DATEADD(m,7,@birthday)) firstSixMonthEnd,
        DATEADD(dd,-(DAY(DATEADD(m,1,@birthday))-1),DATEADD(m,7,@birthday)) secondSexMonthStart,
        DATEADD(dd, -DAY(DATEADD(m,1,@birthday)), DATEADD(m,13,@birthday)) secondSixMonthEnd

firstSixMonthStart      firstSixMonthEnd        secondSexMonthStart     secondSixMonthEnd
----------------------- ----------------------- ----------------------- -----------------------
2012-02-01 00:00:00.000 2012-07-31 00:00:00.000 2012-08-01 00:00:00.000 2013-01-31 00:00:00.000`
于 2012-07-19T15:55:09.680 回答