Jump to content

Datumseinträge in DB-Tabelle automatisch aktualisieren


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...