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

Geschrieben

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

Geschrieben

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.

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

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...