0

有谁知道如何达到这个要求?开始日期总是比结束日期早 73 小时。虽然结束日期将是最近的上午 8 点,但它绝对是过去的日期时间。我想使用表达式进行条件拆分。
场景:
包运行的日期时间:24/12/12 0900
开始日期: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
开始日期: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

4

2 回答 2

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

如果不明显,两者StartDateEndDate都是您添加到ReadWriteVariables脚本任务集合中的包变量。

于 2013-01-02T16:17:18.737 回答
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 应该完全没有问题。

于 2013-01-02T12:17:32.630 回答