Database
 sql >> Datenbank >  >> RDS >> Database

Verwenden der T-SQL-Funktionen DATEADD, DATEDIFF und DATEPART in einfachen Worten

Dieser Artikel konzentriert sich auf die Entwicklung eines grundlegenden Verständnisses für die Verwendung einer der gängigsten Transact-SQL-Datumsfunktionen:DATEADD, DATEDIFF und DATEPART.

In diesem Artikel habe ich auch betont, wie wichtig es ist, diese Datumsfunktionen bei täglichen Datumsmanipulationen richtig zu verwenden, gefolgt von einigen interessanten Szenarien, in denen diese Datumsfunktionen auf kollaborative Weise verwendet werden können, um etwas komplexe Datumsberechnungen zu lösen.

Da diese Funktionen hauptsächlich bei Datumsmanipulationen verwendet werden, versuchen wir zunächst zu verstehen, was wir unter Datumsmanipulation verstehen.

Datumsmanipulation verstehen

Die Datum-Uhrzeit-Werte müssen häufig je nach Anforderung geändert werden, und die Methode zum Ändern oder Handhaben oder Steuern der Datum-Uhrzeit-Berechnungen wird als Datumsmanipulation bezeichnet.

Wir beziehen uns auch auf diese Situation (Datumsmanipulation), wenn ein Datumswert aus einer Datenbank gelesen und dann geändert wird, bevor er erneut gespeichert wird.

Kundenauftragsszenario

Ein interessantes Beispiel für Datumsmanipulation ist eine Kundenbestellung Szenario, wenn eine Bestellung von einem Kunden platziert verarbeitet wird, das Lieferdatum muss 5 Tage vor dem Bestelldatum gesetzt werden , das bedeutet also, dass ein Entwickler T-SQL-Datumsfunktionen verwenden muss, um das Bestelldatum zu manipulieren (modifizieren). um das Lieferdatum zu berechnen .

Beispiel für einen täglichen Umsatzbericht

Ein etwas komplexes Beispiel ist, wenn ein Geschäftsanwender einen täglichen Umsatzbericht erstellt wenn es die Ergebnisse von gestern anzeigt.

Zum Beispiel, wenn wir den Daily Sales Report ausführen am Sonntag um 11:00 Uhr zeigt es uns Ergebnisse basierend auf Samstag, und wenn wir es am Samstag um 17:00 Uhr ausführen, zeigt es uns alle Ergebnisse am Freitag, weil der aktuelle Tag noch nicht vorbei ist und der letzte kompletter Tag verfügbar ist gestern. Auf diese Weise werden die meisten professionellen Tagesberichte, einschließlich Finanzberichte, erstellt.

In diesem Beispiel das aktuelle Datum wird manipuliert (geändert), um das vorherige Datum zu erhalten, das Verkaufsaufzeichnungen für einen ganzen Tag enthält.

Implementierung der Beispiele

Bitte denken Sie an die obigen Beispiele, da wir diese Szenarien implementieren werden, sobald wir ein gutes Verständnis für die Verwendung einiger der gängigsten Datumsfunktionen haben, die in diesem Artikel beschrieben werden.

Datumsfunktionen verstehen

Schauen wir uns zunächst einige grundlegende Datumsfunktionen an, die uns dabei helfen können, die Anforderungen zur Datumsmanipulation zu erfüllen, z Produktionsdatum und so weiter.

Da es keine festen Regeln gibt, beginnen wir zuerst mit der Erkundung der DATEPART-Funktion.

Verwendung der DATEPART-Funktion

Einfache Definition

Die DATEPART-Funktion wird verwendet, um einen Teil eines bestimmten Datums in einem numerischen Wert zurückzugeben.

Der Teil kann der Tag des Datums, der Monat des Datums, das Jahr des Datums usw. sein.

Beispielsweise können wir die DATEPART-Funktion verwenden, um den Tag eines bestimmten Datums abzurufen, um festzustellen, ob eine Bestellung am Sonntag aufgegeben wurde oder nicht.

Ein weiteres Beispiel ist, den Monat eines bestimmten Datums zur weiteren Verarbeitung an eine andere Datumsfunktion weiterzugeben.

Microsoft-Definition

Diese Funktion gibt eine Ganzzahl zurück, die den angegebenen datepart darstellt des angegebenen Datums .

Kompatibilität

Laut Microsoft-Dokumentation ist diese Funktion mit den folgenden SQL Server-Versionen kompatibel:

  1. SQL Server 2008 plus
  2. Azure SQL-Datenbank
  3. Azure SQL Data Warehouse
  4. Paralleles Data Warehouse

Syntax

DATEPART (Datumsteil , Datum)

Beispiel 1:Jahr als Teil des Datums erhalten

Lassen Sie uns auch ein bestimmtes Datum definieren (OrderDate ), um den gewünschten Teil (Tag, Monat, Jahr) mit der DATEPART-Funktion zu erhalten.

Um das Jahr des Bestelldatums zu erhalten, übergeben wir einfach YEAR gefolgt von Bestelldatum (@OrderDate) im DATEPART funktionieren wie folgt:

-- Bestelldatum definierenDECLARE @OrderDate DATETIME2='2017-01-11'-- Jahr des Bestelldatums abrufenSELECT DATEPART(YEAR,@OrderDate) as Year_OrderDate

Beispiel 2:Monatsteil erhalten

Wenn wir den Monat des Datums wissen möchten, dann Monat muss in den DATEPART übergeben werden funktionieren wie folgt:

-- Bestelldatum definierenDECLARE @OrderDate DATETIME2='2017-01-11'-- Monat des Bestelldatums abrufenSELECT DATEPART(MONTH,@OrderDate) as Month_OrderDate

Beispiel 3:Tagesteil erhalten

Um den Tagesteil des Datums zu finden, übergeben Sie einfach DAY in den DATEPART funktionieren wie folgt:

-- Bestelldatum definierenDECLARE @OrderDate DATETIME2='2017-01-11'-- Abrufen des Tages des BestelldatumsSELECT DATEPART(DAY,@OrderDate) as Day_OrderDate

Beispiel 4:Wochentagsteil erhalten

Um den Wochentagteil des Datums zu erhalten, übergeben Sie einfach WEEKDAY in den DATEPART funktionieren wie folgt:

-- Bestelldatum definierenDECLARE @OrderDate DATETIME2='2017-01-11'-- Wochentag des Bestelldatums abrufenSELECT DATEPART(WEEKDAY,@OrderDate) als WeekDay_OrderDate

Wir bekommen 4, was Mittwoch ist, beginnend mit Sonntag, was 1 ist.

Ebenso können wir auch einen Viertel-, Stunden-, Minuten-, Sekundenteil des Datums erhalten.

Kommen wir zur nächsten Datumsfunktion.

Verwendung der DATEADD-Funktion

Einfache Definition

Die Funktion DATEADD wird verwendet, um ein Datum zu addieren oder zu subtrahieren.

Zum Beispiel können wir herausfinden, welches Datum nach vier Tagen oder vier Tage vorher sein wird.

Dies ist sehr praktisch in Szenarien, in denen das erwartete Datum auf der Grundlage eines bestimmten Datums berechnet werden muss, z. B. muss das Ablaufdatum der Mitgliedschaft genau ein Jahr nach dem Registrierungsdatum liegen.

Ein weiteres Beispiel ist die Berechnung des Enddatums des Kurses, das genau zwei Monate nach dem Startdatum des Kurses liegen muss.

Microsoft-Definition

Diese Funktion fügt eine bestimmte Zahl hinzu value (als vorzeichenbehaftete Ganzzahl) zu einem bestimmten datepart eines eingegebenen Datums Wert und gibt dann diesen modifizierten Wert zurück.

Kompatibilität

Laut Microsoft-Dokumentation ist diese Funktion mit den folgenden SQL Server-Versionen kompatibel:

  1. SQL Server 2008 plus
  2. Azure SQL-Datenbank
  3. Azure SQL Data Warehouse
  4. Paralleles Data Warehouse

Syntax

DATEADD (Datumsteil, Zahl, Datum)

Datepart ist ein beliebiger Teil des Datums wie Tag, Monat, Jahr, Wochentag, Stunde usw.

Zahl ist dann Zahl des zu addierenden oder subtrahierenden Datumsteils (Tag, Monat, Jahr etc.)

Datum ist ein gegebenes Datum, das mit der Funktion DATEADD addiert oder subtrahiert werden muss

Beispiel 1:Datum des nächsten Jahres erhalten

Lassen Sie uns auch ein bestimmtes Datum (Registration Date) definieren, das mit DATEADD addiert oder subtrahiert wird Funktion nach Bedarf.

Das Datum des nächsten Jahres kann durch Hinzufügen von 1 zum Datumsteil des Jahres erhalten werden.

Um das nächste Jahr aus dem Registrierungsdatum zu erhalten, fügen wir einfach DatePart Year hinzu gefolgt von 1 gefolgt von Registrierungsdatum (@RegistrationDate) im DATEADD funktionieren wie folgt:

-- Registrierungsdatum definierenDECLARE @RegDate DATETIME2='2018-07-10'-- Nächstes Jahr vom Registrierungsdatum abrufenSELECT DATEADD(YEAR,1,@RegDate) als NextYear_RegDate

Beispiel 2:Datum des nächsten Monats erhalten

Um das Datum des nächsten Monats zu erhalten, übergeben Sie den MONAT datepart zum DATEADD Funktion, gefolgt von der Anzahl der Monate, die wir hinzufügen möchten, gefolgt von dem angegebenen Datum, das in unserem Fall das Registrierungsdatum (RegDate) ist.

-- Registrierungsdatum definierenDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Registrierungsdatum anzeigen-- Den nächsten MONAT aus dem Registrierungsdatum abrufenSELECT DATEADD(MONTH,1,@RegDate) as NextMonth_RegDate

Beispiel 3:Abrufen des Datums am nächsten Tag

Wenn der Kurs am folgenden (nächsten) Tag der Anmeldung beginnt, müssen wir DAY bestehen mit 1 da der nächste Tag dem Registrierungsdatum einen weiteren Tag hinzufügt, was wie folgt demonstriert wird:

-- Registrierungsdatum definierenDECLARE @RegDate DATETIME2='2018-07-10'SELECT @RegDate AS RegDate -- Registrierungsdatum anzeigen-- Nächsten TAG vom Registrierungsdatum abrufenSELECT DATEADD(DAY,1,@RegDate) als NextDAY_RegDate 

Beispiel 4:Einrichten des Tagesumsatzberichtsdatums

Konzentrieren wir uns nun auf ein etwas komplexes Szenario, das häufig bei der Entwicklung täglicher Finanzberichte verwendet wird.

Wenn wir einen täglichen Umsatzbericht erstellen möchten, sollte dieser die Daten von gestern anzeigen, da der aktuelle Tag noch nicht vollständig ist und der letzte vollständige Tag gestern ist, wie am Anfang dieses Artikels besprochen.

Am Ende müssen wir auch die gestrige Datumszeit in einen reinen Datumswert umwandeln, damit der Bericht den ganzen Tag abdecken kann.

Um das gestrige Datum basierend auf dem heutigen Datum zu erhalten, müssen wir „-1 Tag“ wie folgt zum aktuellen Datum hinzufügen:

-- Aktuelles Datum definierenDECLARE @CurrentDate DATETIME2=GETDATE()SELECT @CurrentDate AS CurrentDate -- Registrierungsdatum anzeigen-- Datum und Uhrzeit von gestern vom aktuellen Datum abrufenSELECT DATEADD(DAY,-1,@CurrentDate) as YesterdayDateTime_CurrentDate-- Konvertieren Yesterday DateTime into Date onlySELECT CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE)as YesterdayDateOnly_CurrentDate

DATEDIFF-Funktion verwenden

Einfache Definition

Die DATEDIFF-Funktion wird verwendet, um die Differenz in Tagen, Monaten, Jahren, Stunden usw. zwischen zwei Daten zu ermitteln.

Beispielsweise können wir herausfinden, wie viele Tage zwischen zwei Daten vergangen sind.

Dies ist auch sehr praktisch in den Szenarien, in denen wir den Unterschied zwischen dem erwarteten Lieferdatum der Bestellung und dem tatsächlichen Lieferdatum der Bestellung untersuchen müssen.

Ein weiteres Beispiel ist die Zeiterfassung, d. h. zu verstehen, wie viele Stunden seit Beginn bis jetzt für ein bestimmtes Projekt aufgewendet wurden.

Microsoft-Definition

Diese Funktion gibt die Anzahl (als vorzeichenbehafteter ganzzahliger Wert) der angegebenen Datumsteilgrenzen zurück, die zwischen dem angegebenen Startdatum überschritten wurden und Enddatum .

Kompatibilität

Laut Microsoft-Dokumentation ist diese Funktion mit den folgenden SQL Server-Versionen kompatibel:

  1. SQL Server 2008 plus
  2. Azure SQL-Datenbank
  3. Azure SQL Data Warehouse
  4. Paralleles Data Warehouse

Syntax

DATEDIFF ( Datumsteil , Startdatum , Enddatum )

Datepart ist ein beliebiger Teil des Datums wie Tag, Monat, Jahr, Wochentag, Stunde usw.

Beispiel 1:Unterschiede in Tagen verstehen

Versuchen wir zu verstehen, wie das DATEDIFF Funktion funktioniert.

Wenn wir versuchen, die Differenz in Tagen zwischen dem 1. Juli 2018 und dem 2. Juli 2018 herauszufinden, erhalten wir 1 Tag, was bedeutet, dass das Enddatum vom Startdatum abgezogen wird, um die Differenz zu erhalten:

SELECT DATEDIFF(DAY,'01 JULY 2018','02 JULY 2018') AS Days_Between_Two_Consecutive_DatesSELECT DATEDIFF(DAY,'01 JULY 2018','03 JULY 2018') AS Days_Between_01_July_03_July

Beispiel 2:Tage zwischen Bestellung und Lieferung

Lassen Sie uns zwei verschiedene Daten definieren, Bestelldatum und Lieferdatum die verwendet werden, um die Differenz in Tagen, Monaten, Jahren, Stunden usw. zu bestimmen.

Um die Anzahl der Tage zwischen dem Bestelldatum und dem Lieferdatum zu ermitteln, wird der Datumsteil DAY an das DATEDIFF übergeben Funktion gefolgt von Startdatum (Bestelldatum) und Enddatum (Lieferdatum) :

-- Bestelldatum und Lieferdatum der Bestellung definierenDECLARE @OrderDate DATETIME2='28 July 2018'DECLARE @DeliveryDate DATETIME2='07 August 2018'SELECT @OrderDate AS OrderDate,@DeliveryDate as DeliveryDate-- Bestell- und Lieferdatum anzeigen-- Differenz in Tagen zwischen Bestelldatum und Lieferdatum abrufenSELECT DATEDIFF(DAY,@OrderDate,@DeliveryDate) as Days_Between_Order_and_Delivery

Beispiel 3:Abrufen von Projektstunden (Zeiterfassung)

Dies ist ein interessantes Beispiel für die Zeiterfassung mit der DATEDIFF-Funktion.

Zum Beispiel möchten wir wissen, wie viele Tage und Tage in Stunden und Tage in Minuten wir insgesamt für ein bestimmtes Projekt aufgewendet haben, und dann werden wir zuerst den DAY-Datumsteil an die DATEDIFF-Funktion übergeben, wobei das Startdatum das ist Datum, an dem das Projekt begonnen hat, und das Enddatum ist das heutige Datum, gefolgt von HOUR und MINUTE wie folgt:

-- Startdatum des Projekts definierenDECLARE @ProjectStartDate DATETIME2='10 Nov 2018'SELECT @ProjectStartDate AS ProjectStartDate-- Startdatum des Projekts anzeigen-- Abrufen der Anzahl der Tage, die bisher für das Projekt aufgewendet wurdenSELECT DATEDIFF(DAY,@ProjectStartDate,GETDATE( )) als Project_Days_So_Far-- Abrufen der bisher für das Projekt aufgewendeten StundenSELECT DATEDIFF(HOUR,@ProjectStartDate,GETDATE()) as Project_Hours_So_Far-- Abrufen der bisher für das Projekt aufgewendeten MinutenSELECT DATEDIFF(MINUTE,@ProjectStartDate,GETDATE( )) als Project_Minutes_So_Far

Herzlichen Glückwunsch, Sie haben erfolgreich gelernt, die T-SQL-Funktionen DATEADD, DATEDIFF und DATEPART zu verwenden.

Dinge zu tun

Nachdem Sie nun mit einigen grundlegenden Datumsfunktionen vertraut sind, fordern Sie sich bitte selbst heraus, indem Sie die unten aufgeführten Dinge ausprobieren:

  1. Bitte lesen Sie meinen vorherigen Artikel Unit Testing Report Procedures – Jump to Start TDDD Part-4, um eine SQLDevBlogReportTDD-Beispieldatenbank einzurichten und dann eine Ansicht zu erstellen, um die Anzahl der Monate basierend auf dem Registrierungsdatum des Autors herauszufinden.
  2. li>
  3. Bitte lesen Sie meinen vorherigen Artikel Vereinfachen von Unit-Tests der gespeicherten Hauptprozedur, die auch eine Hilfsprozedur aufruft, um eine SQLBookShop-Beispieldatenbank zu erstellen und das DeliveryDate hinzuzufügen Spalte zur Buchbestellung -Tabelle und erstellen Sie dann eine neue gespeicherte Prozedur ProcessOrder die das DATEADD verwendet Funktion zum Hinzufügen der erwarteten Lieferung fünf Tage nach dem Bestelldatum.
  4. Bitte werfen Sie einen Blick auf meinen vorherigen Artikel Jump to Start Test-Driven Database Development (TDDD) – Part 3 und versuchen Sie, einen täglichen Bericht mit der DATEADD T-SQL-Funktion zu erstellen, indem Sie die Daten in der Beispieldatenbank SQLDevBlogReportTDD so ändern Es sind genügend Daten vorhanden, um im Bericht angezeigt zu werden.