Stephen2012 10 Geschrieben 19. Juli 2012 Melden Teilen Geschrieben 19. Juli 2012 Hallo zusammen, ich stehe vor folgendem Problem und wollte die Frage in die Runde werfen, ob es hierfür eine vernünftige Lösung gäbe? System: ====== * SQL Server 2008 R2 Problem: ======= Ich habe eine Tabelle "uebersicht" in meiner DB mit folgenden Feldern: - Abteilung (Primary Key; varchar(500)) - tmp_date (datetime) Beispieleintrag: Abteilung1, 01.05.2012 00:00:00 Abteilung2, 31.05.2012 00:00:00 usw. Der Datumseintrag soll nun anhand vom jeweiligen Arbeitstag automatisch auf einen bestimmten Wert gesetzt werden (beispielsweise auf den ersten Tag des Vormonats bzw. den letzten Tag des Vormonats). Erläuterung anhand dem Monat Juli: - Als Arbeitstage gelten jeweils Mo., Di., Mi., Do. & Fr. Für "Abteilung1" soll jeweils nach dem 3. Arbeitstag im jeweiligen Monat der Datumseintrag auf den 01. des Vormonats gesetzt werden. Für "Abteilung2" soll jeweils nach dem 7. Arbeitstag im jeweiligen Monat der Datumseintrag auf den letzten Tag des Vormonats gesetzt werden. usw. Also vom 01. - 04. Juli sehen die Einräge wie folgt aus: Abteilung1, 01.05.2012 00:00:00 Abteilung2, 31.05.2012 00:00:00 Am 05. Juli (== 4. Arbeitstag im Juli) sollte der Eintrag für "Abteilung1" aktualisiert worden sein (beispielsweise mit Hilfe eines Scripts welches täglich um 04:00 Uhr läuft): Abteilung1, 01.06.2012 00:00:00 Abteilung2, 31.05.2012 00:00:00 Die nächste Aktulisierung sollt dann am 11. Juli (== 8. Arbeitstag) erfolgen: Abteilung1, 01.06.2012 00:00:00 Abteilung2, 30.06.2012 00:00:00 usw. Gibt es hierfür eine vernünftige Lösung? Vielen Dank Stephen Zitieren Link zu diesem Kommentar
Stephen2012 10 Geschrieben 23. Juli 2012 Autor Melden Teilen Geschrieben 23. Juli 2012 Hier wäre jetzt meine erste Lösungsumsetzung, allerdings werden noch keine Arbeitstage berücksichtigt, sondern nur Tage. Hinweis: Diese CASTs setzen den jeweiligen Datumseintrag auf den letzten Tag des Vormonats, es sind aber auch andere Varianten möglich. USE datenbank; IF DATEPART(day, GETDATE()) > 3 BEGIN IF DATEPART(day, GETDATE()) > 7 BEGIN UPDATE dbo.uebersicht SET tmp_date = (CAST(SUBSTRING(CAST((DATEADD(m,0,GETDATE())-DAY(GETDATE())) AS BINARY(8)),1,4) + 0x00000000 AS DATETIME)) WHERE Abteilung = 'Abteilung1'; END ELSE BEGIN UPDATE dbo.uebersicht SET tmp_date = (CAST(SUBSTRING(CAST((DATEADD(m,0,GETDATE())-DAY(GETDATE())) AS BINARY(8)),1,4) + 0x00000000 AS DATETIME)) WHERE Abteilung = 'Abteilung2'; END END ELSE ... Jetzt fehlt "nur" noch der kompliziertere Teil mit den Arbeitstagen. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.