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 は開始日と終了日の間にある必要があります

私が試したこと:

    (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

明らかでない場合は、 と の両方StartDateがスクリプト タスクEndDateのコレクションに追加するパッケージ変数です。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 に答える