表结构过滤SQL行
ID Activate_Date InActivate_Date
1 2009-12-18 10:25:19.470 2010-01-13 08:32:30.130
2 2009-12-18 10:25:19.470 2010-01-13 08:32:30.253
3 2009-12-18 10:25:19.470 2010-01-13 08:32:30.363
4 2009-12-18 10:25:19.470 2010-01-13 08:32:30.583
5 2009-12-18 10:25:19.470 2010-01-13 08:32:30.473
6 2010-01-13 14:46:53.880 2010-01-13 14:50:45.443
7 2010-01-13 08:32:30.600 2010-01-13 14:46:23.833
8 2010-01-13 08:32:30.600 2010-01-13 14:46:23.833
9 2010-01-13 08:32:30.600 2010-01-13 14:46:23.833
10 2010-01-13 08:32:30.600 2010-01-13 14:46:23.833
11 2010-01-13 14:46:53.880 2010-01-13 14:50:45.443
12 2010-01-13 14:44:56.397 2010-01-13 14:46:23.833
13 2010-01-13 12:42:59.113 2010-01-13 14:46:23.833
14 2010-01-13 12:42:59.113 2010-01-13 14:46:23.833
15 2010-01-13 12:42:59.113 2010-01-13 14:46:23.833
16 2010-01-13 12:42:59.113 2010-01-13 14:46:23.833
输入参数:
Declare @StartDate DateTime
Declare @EndDate DateTime
Declare @FirstShiftStartTime varchar(8)
Declare @FirstShiftEndTime varchar(8)
Set @StartDate = '1/01/2010'
Set @EndDate = '1/03/2010'
SET @FirstShiftStartTime = '15:00:00'
SET @FirstShiftEndTime = '17:00:00'
输出:
输出应当是所有的行,使得时间过滤器应在每一天的形式施加转变。
1/01/2010 from 15:00:00 to 17:00:00
2/02/2010 from 15:00:00 to 17:00:00
3/03/2010 from 15:00:00 to 17:00:00
我希望我已经作出了明确的自我:因此,如果我们使用这些参数则应该首先从ID 1 5行5
所以在输出过滤器应为应用了放
我试着使用:
((DatePart(Table.Activate_Date) <= @StartDate AND DatePart(Table.INActivate_Date) > @StartDate) OR
(DatePart(Table.Activate_Date) >= @StartDate AND DatePart(Table.InActivate_Date) < @EndDate)
)
AND ((TimePart(Table.Activate_Date) >[email protected]) AND (TimePart(Table.INActivate_Date) < @FirstShiftEndTime))
但这不会如果激活日期工作,灭活日期跨越多天。
我能找到的另一种方法是创建一个临时表,每天循环,然后用过滤器填充临时表,然后应用上述方法。
我希望应该有一些简单的东西,然后我在想。
任何帮助将不胜感激。
MikeW感谢您的答复,但我需要时间切片在每一天。即,如果我们采用上述示例,则不应包含Activate_Date 1/02/2010 18:00:00与Inactive_Date 1/02/2010 20:00:00的条目。 – 2010-02-02 18:48:23