Web design and hosting, database, cloud and social media solutions that deliver real business results
  • Datenbank-Beratungsdienste
    • Technische Artikel
      • Verwenden von SQL Server Daten
      • SQL Server 2008 Wartungsplan
      • Verwenden von SQL Server Datum
      • Verwenden von SQL Server Funktionen
      • Verwenden von SQL Server Pivot-Unpivot
    • Werkzeuge
      • Claytabase Server Disk IOPs Calculator
      • SQL-Code-Sicherung
      • SQL-Drucker
  • Website Design
    • Technische Artikel
      • ASP-NET
      • CSS
    • Website Sicherheit
  • Cloud Services
    • Artikel
      • Anfordern von SSL und Generierung von PFX-Datei in OpenSSL Simple Steps
    • Microsoft Azure
    • Microsoft Office
  • Sozialen Medien
  • Über
    • Mannschaft
      • Chester Copperpot
    • Mappe
CS - češtinaEN - EnglishES - EspañolFR - FrançaisHI - हिंदीIT - italianoPL - polskiPT - PortuguêsRU - русскийTR - TürkZH - 中国的

Funktion, um den bestimmten Tag des Monats zurückzugeben

SQL Server 2008, Funktion, um den bestimmten Tag des Monats zurückzugeben

Dies war für unseren Wartungsplan nützlich, da wir ein Skript verwenden und Code hinzufügen können, der an einem bestimmten Tag läuft (wie der letzte Sonntag oder der 1. Wochentag), habe ich ihn auch für die Vorhersage der Zeiten verwendet, auf denen Jobs läuft Unsere Server.

Die Funktion benötigt nur drei Eingänge, den Monat, den Sie interessieren, den Typ und die Nummer.

Es verwendet ähnliche Informationen wie Microsoft für monatliche Job-Zeitpläne verwenden.

SQL

ALTER FUNCTION FirstDay(@Month DATETIME,@Type INT, @Counter INT) RETURNS DATETIME

AS BEGIN

SET @Month = CONVERT(DATE,DATEADD(DAY,1-DATEPART(DAY,@Month),@Month))

DECLARE @CurDate DATETIME=@Month,@Date DATETIME,@Matches INT=0,@TempDate DATETIME


WHILE @CurDate<DATEADD(MONTH,1,@Month) AND @Date IS NULL BEGIN

     

      IF (SELECT (CASE @Type WHEN 1 THEN (CASE WHEN DATEPART(WeekDay,@CurDate)=1 THEN 1 ELSE 0 END)

      WHEN 2 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=2 THEN 1 ELSE 0 END)

      WHEN 3 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=3 THEN 1 ELSE 0 END)

      WHEN 4 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=4 THEN 1 ELSE 0 END)

      WHEN 5 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=5 THEN 1 ELSE 0 END)

      WHEN 6 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=6 THEN 1 ELSE 0 END)

      WHEN 7 THEN(CASE WHEN DATEPART(WeekDay,@CurDate)=7 THEN 1 ELSE 0 END)

      WHEN 8 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,2,3,4,5,6,7) THEN 1 ELSE 0 END)

      WHEN 9 THEN(CASE WHEN DATEPART(WeekDay,@CurDate) IN (2,3,4,5,6) THEN 1 ELSE 0 END)

      WHEN 10 THEN (CASEWHEN DATEPART(WeekDay,@CurDate) IN (1,7) THEN 1 ELSE 0 END)

      ELSE 0 END))=1 BEGIN

            SET @Matches = @Matches+1

            SET @TempDate = @CurDate

      END

     

      IF @Matches=@Counter AND @Counter<32 BEGIN

      SET @Date=@TempDate

      END

      SET @CurDate=DATEADD(DAY,1,@CurDate)

     

END

 

RETURN ISNULL(@Date,@TempDate)

END

GO

Die Werte, die wir haben, sind ähnlich der Sysschedulattabelle, aber ich werde sie hier auflisten;
Für @Type. 1 = Sonntag, 2 = Montag, 3 = Dienstag, 4 = Mittwoch, 5 = Donnerstag, 6 = Freitag, 7 = Samstag
Für @Counter, 1 = 1., 2 = 2nd, 3 = 3rd, 4 = 4th etc ..., 32 = Last (diese sind etwas anders)
Die folgenden Schritte sind wie folgt:
  • Setzen Sie das Eingabedatum auf den ersten Tag des Monats
  • Deklariere Variablen für unsere Schleife durch den Monat
  • Loop durch jedes Datum und aktualisieren Match-Count, wenn es eine Übereinstimmung, und aktualisieren Sie ein temporäres Datum, um die letzte Übereinstimmung zu halten
  • Wenn die Übereinstimmungen gleich unserem Zähler sind und der Zähler weniger als 5 (5 = letzter Tag) ist, dann setzen wir unser Rückgabedatum als das Tempeldatum, das wird dann die Schleife verlassen, da das Datum nicht mehr Null ist.
  • Fügen Sie ein zu unserem aktuellen Datum hinzu und führen Sie unseren Scheck erneut durch.
  • Rückkehr unser Datum, oder wenn null das Temp-Datum, das war unser letztes Spiel war.

Unten ist ein Beispiel dafür, wo es zum Beispiel unsere Wartungspläne hinzugefügt werden könnte. Das läuft am letzten Sonntag im Monat.

SQL

IF CONVERT(DATE,GETDATE())=(SELECT DatabaseUtilities.dbo.FirstDay(GETDATE(),1,32)) BEGIN
--Run your code here...
END
Ich hoffe, das kann dir nützlich sein, oder es gibt dir eine Idee für andere Prozesse.

Author

Gavin Clayton
Gavin Clayton
Ich habe Claytabase im Jahr 2010 als eine Möglichkeit, meine Arbeit mit SQL Server und ASP.NET zu tragen. Dies hat in der Ousia Content Management System kulminiert, die vom Konzept zu einem der schnellsten CMS auf dem Markt genommen wird.
 Google Translate
Google Translate

Helpful?

Please note, this commenting system is still in final testing.
RSS Login ContactCookie-RichtlinieSeitenverzeichnis
facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd
+441983 300 796info@claytabase.co.ukGround Floor, Building 1000, Lakeside North Harbour, Western Road, Portsmouth, Hampshire, United Kingdom, PO6 3EZ
Die Einstellungen auf dieser Seite sind so eingestellt, dass alle Cookies zulässig sind. Diese können auf unserer Cookie Policy & Settings Seite geändert werden. Wenn Sie diese Seite weiter nutzen, stimmen Sie der Verwendung von Cookies zu.
Ousia Logo
Ousia CMS Loader