任何人都知道如何达到这个要求?开始日期始终为结束日期前73小时。虽然结束日期将是最近的上午8点,但它绝对是过去的日期时间。我想在使用表达式的条件拆分中这样做
场景:
包装运行的日期时间:24/12/12 0900
Startdate:21/12/12 0700
结束日期:24/12/12 0800
包裹运行的日期时间:25/12/12 2300
开始日期:22/12/12 0700
结束日期:25/12/12 0800
包裹运行的日期时间:26/12/12 0759
开始日期:22/12/12 0700
结束日期:25/12/12 0800
包裹运行的日期时间:26/12/12 0800
开始日期:22/12/12 0700
结束日期:25/12/12 0800
包裹运行的日期时间:26/12/12 0805
Startdate:23/12/12 0700
结束日期:26/12/12 0800
正如你所看到的那样,我希望数据能够从我的灵魂中包含到我的分段时间内73小时。我想要73小时的活动数据。所以EVENT_D + EVENT_T应该在Startdate和Enddate之间
我尝试了什么:
(DT_DBTIMESTAMP)(EVENT_D + " " + EVENT_T) >= DATEADD("HH",-73,GETDATE()) && (DT_DBTIMESTAMP)(EVENT_D + " " + EVENT_T) <= DATEADD("HH",8,(DT_DBDATE)(GETDATE()))
它没有给我我想要的东西。我试过的只在73小时前给我,直到现在。不是我想要的。迫切需要指导。我正在使用SSIS 2005
在此先感谢,
10e5x
答案 0 :(得分:2)
这是一种过于复杂的简单表达式逻辑,它使我能够完成一个脚本任务 - 因为你使用的是SSIS 2005,所以必须用VB.NET编写:
Public Sub Main()
Dim runDate As DateTime = CDate(Dts.Variables("RunDate").Value)
Dim startDate As DateTime
Dim endDate As DateTime
' Set the end date to be 8AM on the run date
endDate = New DateTime(runDate.Year, runDate.Month, runDate.Day).AddHours(8)
If runDate <= endDate Then
' Use yesterday for the end date
endDate = endDate.AddDays(-1)
End If
startDate = endDate.AddHours(-73)
Dts.Variables("StartDate").Value = startDate
Dts.Variables("EndDate").Value = endDate
Dts.TaskResult = Dts.Results.Success
End Sub
如果不明显,StartDate
和EndDate
都是您添加到脚本任务的ReadWriteVariables
集合中的包变量。
答案 1 :(得分:1)
在TSQL中尝试以下逻辑:
DECLARE @DATE DATETIME, @END_DATE DATETIME, @START_DATE DATETIME;
SET @DATE = '2012-12-26 08:00:00'
SELECT @END_DATE = CASE WHEN @DATE > DATEADD(HOUR,8,CAST(CAST(@DATE AS DATE) AS DATETIME))
THEN DATEADD(HOUR,8,CAST(CAST(@DATE AS DATE) AS DATETIME))
ELSE DATEADD(HOUR,8,CAST(CAST(@DATE - 1 AS DATE) AS DATETIME))
END;
SELECT @START_DATE = DATEADD(HOUR,-73, @END_DATE);
SELECT @START_DATE, @END_DATE;
一旦正确处理了边界案例,将其转换为SSIS应该没有问题。