在SSIS条件拆分中表达强硬

时间:2013-01-02 08:24:23

标签: sql-server expression ssis

任何人都知道如何达到这个要求?开始日期始终为结束日期前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

2 个答案:

答案 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

如果不明显,StartDateEndDate都是您添加到脚本任务的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应该没有问题。