Web design and hosting, database, cloud and social media solutions that deliver business results
  • Geschäftslösungen
    • Robotische Prozessautomatisierung
    • Software
    • Datenbank-Beratungsdienste
      • Datawarehouse-Dienste
      • Datenintegration
      • PowerBI
      • Werkzeuge
    • Website Design
      • Weblokalisierung und -übersetzung
      • Website Sicherheit
    • Cloud Services
      • Microsoft Azure
    • Microsoft Office
    • Sozialen Medien
  • Akademie
    • Unsere Testumgebung
    • Datenbankdesign lernen
      • SQL Server 2008 Wartungsplan
      • Offene Abfrage abrufen
      • Verwenden von SQL Server Daten
      • Verwenden von SQL Server Datum
      • Verwenden von SQL Server Funktionen
      • Verwenden von SQL Server Pivot-Unpivot
    • Lern Web Design
      • ASP-NET
      • CSS
      • Verwendung von JavaScript
    • Lernen von IT-Diensten
      • Anfordern von SSL und Generierung von PFX-Datei in OpenSSL Simple Steps
  • Über
    • Bloggen
    • Karriere
    • Mannschaft
      • Adrian Ananda
      • Ali Al-Amine
      • Ayse Hur
      • Chester Copperpot
      • Gavin Clayton
      • Sai Gangu
      • Suneel Kumar
      • Surya Mukkamala
    • Mappe
čeština (CS)Deutsch (DE)English (EN-GB)English (EN-US)Español (ES)Français (FR)हिंदी (HI)italiano (IT)日本語 (JA)polski (PL)Português (PT)русский (RU)Türk (TR)中国的 (ZH)

Funktion zur Rückgabe eines bestimmten Tages des Monats

SQL Server 2008, Funktion zur Rückgabe eines bestimmten Monatstages
Verwenden von SQL Server-Datumsfunktionen

Dies war für unseren Wartungsplan nützlich, da wir ein Skript verwenden und Code hinzufügen können, der an einem bestimmten Tag ausgeführt wird (wie dem letzten Sonntag oder dem ersten Wochentag). Ich habe es auch verwendet, um die Zeiten vorherzusagen, zu denen Jobs ausgeführt werden unsere Server.

Die Funktion erfordert nur drei Eingaben, den Monat, an dem Sie interessiert sind, den Typ und die Nummer.

Es verwendet ähnliche Informationen wie Microsoft für monatliche Auftragspläne.

mehr: SQL Server flexible Datumsfunktionen und Kalendertabelle

SQL

CREATE FUNCTION dbo.GetMonthDay(@Month DATETIME,@Type INT, @Counter INT) RETURNS DATETIME AS BEGINSET @Month = CONVERT(DATE,DATEADD(DAY,1-DATEPART(DAY,@Month),@Month))DECLARE @CurDate DATETIME=@Month,@Date DATETIME,@Matches INT=0,@TempDate DATETIMEWHILE @CurDateIF (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 (CASE WHEN DATEPART(WeekDay,@CurDate) IN (1,7) THEN 1 ELSE 0 END)ELSE 0 END))=1 BEGINSET @Matches = @Matches+1SET @TempDate = @CurDateENDIF @Matches=@Counter AND @Counter<32 BEGINSET @Date=@TempDateENDSET @CurDate=DATEADD(DAY,1,@CurDate)ENDRETURN ISNULL(@Date,@TempDate)ENDGO

Was es macht

Die Werte, die wir haben, ähneln denen der sysschedules-Tabelle, aber ich werde sie hier auflisten;

@Typ

  • 1=Sonntag
  • 2=Montag
  • 3=Dienstag
  • 4=Mittwoch
  • 5=Donnerstag
  • 6=Freitag
  • 7=Samstag
  • 8=beliebiger Tag bis zum Zähler oder letzter Tag des Monats
  • 9=beliebiger Wochentag bis zum Zähler oder Monatsletzter
  • 10=jeder Samstag oder Sonntag bis zum Zählerstand oder dem letzten Vorkommen des Monats

@Zähler

  • 1=1
  • 2=2
  • 3=3
  • 4=4
  • 32=Letzte (diese sind etwas anders)

Die folgenden Schritte sind wie folgt;

  • Stellen Sie das Eingabedatum auf den ersten Tag des Monats ein
  • Deklarieren Sie Variablen für unsere Schleife durch den Monat
  • Durchlaufen Sie jedes Datum und aktualisieren Sie die Anzahl der Übereinstimmungen, wenn es eine Übereinstimmung gibt, und aktualisieren Sie ein temporäres Datum, um die letzte Übereinstimmung zu halten
  • Wenn die Übereinstimmungen unserem Zähler entsprechen und der Zähler kleiner als 5 ist (5 = letzter Tag), dann setzen Sie unser Rückkehrdatum als temporäres Datum, dies beendet die Schleife, da das Datum nicht mehr null ist.
  • Fügen Sie eins zu unserem aktuellen Datum hinzu und führen Sie unsere Überprüfung erneut durch.
  • Geben Sie unser Datum zurück oder, falls null, das temporäre Datum, das unsere letzte Übereinstimmung war.

Unten ist ein Beispiel für die Verwendung. Dieser läuft jeden Sonntag im Februar.

Sie können es in einer IF-Klausel verwenden, um zu bestimmen, ob bestimmte Teile einer gespeicherten Prozedur ausgeführt werden sollen oder nicht.

Testing

SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,1) --2020-02-02 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,2) --2020-02-09 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,3) --2020-02-16 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,4) --2020-02-23 00:00:00.000SELECT Utilities.dbo.GetMonthDay('2020-02-11',1,32)--2020-02-23 00:00:00.000IF Utilities.dbo.GetMonthDay('2020-02-11',1,32)='2020-02-23' BEGINSELECT 'Run your code'END

Weiterlesen

Ich hoffe, dass dies für Sie von Nutzen sein kann oder Ihnen eine Idee für andere Prozesse gibt.

Wenn Sie mit Feiertagen rechnen müssen, benötigen Sie eine Kalendertabelle, und Sie können ein großartiges Beispiel unter dem folgenden Link sehen.

mehr: Fügen Sie bisherige Arbeitstage in einer SQL Server-Funktion mit flexiblen Optionen hinzu

Author

Helpful?

Please note, this commenting system is still in final testing.
Copyright Claytabase Ltd 2020

Registered in England and Wales 08985867

RSSLoginLink Cookie-RichtlinieSeitenverzeichnis

Social Media

facebook.com/Claytabaseinstagram.com/claytabase/twitter.com/Claytabaselinkedin.com/company/claytabase-ltd

Get in Touch

+442392064871info@claytabase.comClaytabase Ltd, Unit 3d, Rink Road Industrial Estate, PO33 2LT, United Kingdom
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
Logout
Ousia CMS Loader