2016-10-13 21 views
0

In SSIS habe ich einen Ausdruck, der sagt:Ändern Datumsformat in SSIS Ausdruck

"SELECT _sessions.session_id AS session_id, _sessions.user_id AS user_id, 
     _sessions.updated_at FROM public._sessions _sessions 
     WHERE _sessions.updated_at > '" +(DT_STR, 20, 1252)@[User::MaxId] + "'" 

Diese Ausgänge:

SELECT _sessions.session_id AS session_id, _sessions.user_id AS user_id, 
     _sessions.updated_at FROM public._sessions _sessions 
     WHERE _sessions.updated_at > '13/10/2016 11:58:00' 

Jedoch habe ich das Datum ausgeben müssen als so: > '13-10-2016 11:58:00'. es sind die Striche und nicht die Schrägstriche.

Wie ändere ich meinen Ausdruck, um dies zu erfüllen?

Antwort

1

Sie haben ein SSIS-Nichtstandardformat für das Datum DD-MM-YYYY. Versuchen Sie diesen Ausdruck

RIGHT("0" + (DT_STR, 2, 1252)DATEPART("dd", @[User::MaxId]), 2) + "-" + 
RIGHT("0" + (DT_STR, 2, 1252)DATEPART("mm", @[User::MaxId]), 2) + "-" + 
(DT_STR, 4, 1252)DATEPART("yyyy", @[User::MaxId]) + 
+ " " + (DT_STR, 8, 1252)(DT_DBTIME)@[User::MaxId] 

Dies baut Ihr Datum. Zweite Zeile fügt Zeitteil hinzu.

3

Wenn Sie in SSIS einen DateTime-Typ in einen String umwandeln, ruft er die Methode ToString() des zugrundeliegenden .NET-Objekts auf. Das wird Ihre Lokalisierungsregeln verwenden, um die Zeichenfolge zu erzeugen.

Sie haben TT/MM/JJJJ hh: mm: ss aufgrund einer britischen Lokalisierung. Ich hätte mm/dd/yyyy usw. für ein US-Gebietsschema.

Wenn Sie also ein spezielles Format wünschen, müssen Sie es selbst erstellen. Ich bin mit Starttime, da es leichter gemacht für die Prüfung aber unter der Annahme, MaxId ist auch ein Datetime-Typ, es ist eine einfache Substitution

(DT_WSTR, 4) YEAR(@[System::StartTime]) 
+ "-" 
+ RIGHT("0" + (DT_WSTR, 2) MONTH(@[System::StartTime]),2) 
+ "-" 
+ RIGHT("0" + (DT_WSTR, 2) DAY(@[System::StartTime]),2) 
+ " " 
+ LEFT(RIGHT((DT_WSTR, 24) (@[System::StartTime]), 11), 9) 

Die Sache oben zu beachten ist, dass die führende Null für Tag und Monat zu bekommen, Wir setzen eine führende Null auf die emittierte Zeichenkette (für den Monat März haben wir 03, für Oktober ist es 010) und behalten dann nur die nachfolgenden 2 Zeichen. Dies ist viel einfacher zu beheben als bedingte Logik basierend auf dem tatsächlichen Datum.

Ich nehme eine faule Route für Zeitmanipulation, also verwende ich die letzten 11 Zeichen der Standardzeit, um den Zeitabschnitt zu erhalten, aber streife dann den AM/PM-Modifikator ab.