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

Utilizzo delle funzioni DATEADD, DATEDIFF e DATEPART T-SQL in termini semplici

Questo articolo si concentra sullo sviluppo di una comprensione di base su come utilizzare una delle funzioni di data Transact-SQL più comuni:DATAADD, DATEDIFF e DATEPART.

In questo articolo, ho anche sottolineato l'importanza di utilizzare correttamente queste funzioni di data nelle manipolazioni giornaliere della data, seguite da alcuni scenari interessanti in cui queste funzioni di data possono essere utilizzate in modo collaborativo per risolvere calcoli di data leggermente complessi.

Poiché queste funzioni vengono utilizzate principalmente nella manipolazione della data, cerchiamo prima di capire cosa intendiamo per manipolazione della data.

Comprendere la manipolazione della data

I valori di data e ora devono spesso essere modificati in base ai requisiti e il metodo di modifica, gestione o controllo dei calcoli di data e ora è noto come manipolazione della data.

Ci riferiamo anche a questa situazione (manipolazione della data) quando un valore di data viene letto da un database e quindi modificato prima che venga nuovamente memorizzato.

Scenario ordine cliente

Un esempio interessante di manipolazione della data è un ordine cliente scenario, quando un ordine inserito da un cliente viene elaborato, la data di consegna deve essere impostato 5 giorni prima della data dell'ordine , quindi ciò significa che uno sviluppatore deve utilizzare le funzioni di data T-SQL per manipolare (modificare) la data dell'ordine per calcolare la data di consegna .

Rapporto sulle vendite giornaliere di esempio

Un esempio leggermente complesso è quando un utente aziendale esegue un Rapporto giornaliero sulle vendite se mostra i risultati di ieri.

Ad esempio, se eseguiamo il Rapporto giornaliero sulle vendite domenica alle 11:00 ci mostrerà i risultati in base al sabato e se lo eseguiamo sabato alle 17:00 ci mostrerà tutti i risultati il ​​venerdì, perché il giorno corrente non è ancora finito e il più recente la giornata completa disponibile è ieri. Questo è il modo in cui la maggior parte dei rapporti giornalieri professionali, inclusi i rapporti finanziari, sono progettati per essere eseguiti.

In questo esempio, la data corrente viene manipolato (modificato) per ottenere la data precedente, che contiene i record di vendita per un giorno intero.

Implementazione degli esempi

Tieni a mente gli esempi precedenti poiché implementeremo questi scenari una volta che avremo una buona comprensione dell'utilizzo di alcune delle funzioni di data più comuni descritte in questo articolo.

Comprendere le funzioni della data

Diamo prima un'occhiata ad alcune funzioni di base della data che possono aiutarci a soddisfare i requisiti di manipolazione della data, come determinare i giorni tra due date (data dell'ordine e data di consegna), ottenere i record delle vendite della scorsa settimana in base alla data corrente o calcolare la data di scadenza prevista in base al data di produzione e così via.

Poiché non ci sono regole rigide e veloci, iniziamo prima a esplorare la funzione DATEPART.

Utilizzo della funzione DATEPART

Definizione semplice

La funzione DATEPART viene utilizzata per restituire una parte di una data data in un valore numerico.

La parte può essere il giorno della data, il mese della data, l'anno della data ecc.

Ad esempio, possiamo utilizzare la funzione DATEPART per ottenere il giorno di una determinata data per determinare se un ordine è stato effettuato di domenica o meno.

Un altro esempio consiste nel trasferire il mese di una data data a un'altra funzione di data per un'ulteriore elaborazione.

Definizione Microsoft

Questa funzione restituisce un numero intero che rappresenta il datepart specificato della data specificata .

Compatibilità

Secondo la documentazione Microsoft, questa funzione è compatibile con le seguenti versioni di SQL Server:

  1. SQL Server 2008 più
  2. Database SQL di Azure
  3. Data Warehouse SQL di Azure
  4. Data Warehouse parallelo

Sintassi

DATEPART (datepart , date)

Esempio 1:ottenere l'anno parte della data

Definiamo anche una certa data (OrderDate ) per ottenere la parte desiderata (Giorno, Mese, Anno) utilizzando la funzione DATEPART.

Per ottenere la data dell'anno dell'ordine, trascorriamo semplicemente ANNO seguito da Data dell'ordine (@OrderDate) nella PARTE DI DATA funzionano come segue:

-- Define Order Date
DECLARE @OrderDate DATETIME2='2017-01-11'

-- Getting Year of the Order Date
SELECT DATEPART(YEAR,@OrderDate) as Year_OrderDate

Esempio 2:Ottenere la parte del mese

Se siamo interessati a conoscere il mese della data, allora Mese deve essere passato a DATEPART funzionano come segue:

-- Define Order Date
DECLARE @OrderDate DATETIME2='2017-01-11'

-- Getting Month of the Order Date
SELECT DATEPART(MONTH,@OrderDate) as Month_OrderDate

Esempio 3:ottenere la parte giornaliera

Per trovare la parte Day della data, trascorri semplicemente DAY nel DATEPART funzionano come segue:

-- Define Order Date
DECLARE @OrderDate DATETIME2='2017-01-11'

-- Getting Day of the Order Date
SELECT DATEPART(DAY,@OrderDate) as Day_OrderDate

Esempio 4:Ottenere la parte per il giorno della settimana

Per ottenere la parte della data del giorno della settimana, passa semplicemente WEEKDAY nel DATEPART funzionano come segue:

-- Define Order Date
DECLARE @OrderDate DATETIME2='2017-01-11'

-- Getting Week Day of the Order Date
SELECT DATEPART(WEEKDAY,@OrderDate) as WeekDay_OrderDate

Stiamo ottenendo 4, che è mercoledì a partire da domenica, che è 1.

Allo stesso modo, possiamo anche ottenere un quarto, un'ora, un minuto, una seconda parte della data.

Passiamo alla funzione della data successiva.

Utilizzo della funzione DATAADD

Definizione semplice

La funzione DATAADD viene utilizzata per aggiungere o sottrarre una data.

Ad esempio, possiamo scoprire quale sarà la data dopo quattro giorni o quattro giorni prima.

Questo è molto utile negli scenari in cui la data prevista deve essere calcolata in base a una data data, ad esempio la data di scadenza dell'abbonamento deve essere esattamente un anno dalla data di registrazione.

Un altro esempio è calcolare la data di fine del corso che deve essere esattamente due mesi dopo la data di inizio del corso.

Definizione Microsoft

Questa funzione aggiunge un numero specificato valore (come intero con segno) a un datepart specificato di una data di input valore, quindi restituisce quel valore modificato.

Compatibilità

Secondo la documentazione Microsoft, questa funzione è compatibile con le seguenti versioni di SQL Server:

  1. SQL Server 2008 più
  2. Database SQL di Azure
  3. Data Warehouse SQL di Azure
  4. Data Warehouse parallelo

Sintassi

DATEADD (datepart, number, date)

Datepart è qualsiasi parte della data come giorno, mese, anno, giorno della settimana, ora ecc.

Il numero è quindi il numero della parte di data (giorno, mese, anno ecc.) da aggiungere o sottrarre

La data è una data specifica che deve essere aggiunta o sottratta utilizzando la funzione DATAADD

Esempio 1:ottenere la data del prossimo anno

Definiamo anche una certa data (Data di registrazione) che verrà aggiunta o sottratta utilizzando il DATEADD funzione in base ai requisiti.

La data dell'anno successivo può essere ottenuta aggiungendo 1 alla parte Data dell'anno.

Per ottenere l'anno successivo dalla data di registrazione, aggiungiamo semplicemente DatePart Anno seguito da 1 seguito da Data di registrazione (@RegistrationDate) nel DATEADD funzionano come segue:

-- Define Registration Date
DECLARE @RegDate DATETIME2='2018-07-10'

-- Getting Next Year from registratoin date
SELECT DATEADD(YEAR,1,@RegDate) as NextYear_RegDate

Esempio 2:ottenere la data del mese successivo

Per ottenere la data del mese successivo, supera il MESE datepart al DATEADD funzione seguita dal numero di mesi che vogliamo aggiungere seguito dalla data indicata che è la data di registrazione (RegDate) nel nostro caso.

-- Define Registration Date
DECLARE @RegDate DATETIME2='2018-07-10'
SELECT @RegDate AS RegDate -- Show Registration Date

-- Getting Next MONTH from the registratoin date
SELECT DATEADD(MONTH,1,@RegDate) as NextMonth_RegDate

Esempio 3:ottenere la data del giorno successivo

Se il corso inizia il giorno successivo (successivo) di registrazione, dobbiamo superare il DAY con 1 poiché il giorno successivo aggiunge un altro giorno alla data di registrazione, che si dimostra come segue:

-- Define Registration Date
DECLARE @RegDate DATETIME2='2018-07-10'
SELECT @RegDate AS RegDate -- Show Registration Date

-- Getting Next DAY from registratoin date
SELECT DATEADD(DAY,1,@RegDate) as NextDAY_RegDate

Esempio 4:impostazione della data del rapporto sulle vendite giornaliere

Ora concentriamoci su uno scenario leggermente complesso utilizzato spesso nello sviluppo dei report finanziari giornalieri.

Se vogliamo creare un rapporto sulle vendite giornaliere, dovrebbe mostrare i dati di ieri, poiché il giorno corrente non è ancora completo e il giorno completo più recente è ieri, come discusso all'inizio di questo articolo.

Alla fine, dobbiamo anche convertire il valore Date Time di ieri in Date only per rendere più facile per il rapporto coprire l'intera giornata.

Per ottenere la data di ieri in base alla data odierna, dobbiamo aggiungere "-1 giorno" alla data corrente come segue:

-- Define Current Date
DECLARE @CurrentDate DATETIME2=GETDATE()
SELECT @CurrentDate AS CurrentDate -- Show Registration Date

-- Getting Yesterday Date and Time from current date
SELECT DATEADD(DAY,-1,@CurrentDate) as YesterdayDateTime_CurrentDate

-- Converting Yesterday DateTime into Date only
SELECT CAST(DATEADD(DAY,-1,@CurrentDate) AS DATE)as YesterdayDateOnly_CurrentDate

Utilizzo della funzione DATEDIFF

Definizione semplice

La funzione DATEDIFF viene utilizzata per determinare la differenza in giorni, mesi, anni, ore ecc. tra due date.

Ad esempio, possiamo scoprire quanti giorni sono trascorsi tra due date.

Ciò è molto utile anche negli scenari in cui è necessario esaminare la differenza tra la data di consegna prevista dell'ordine e la data di consegna effettiva dell'ordine.

Un altro esempio è il monitoraggio del tempo, che significa capire quante ore sono state spese su un particolare progetto da quando è iniziato fino ad ora.

Definizione Microsoft

Questa funzione restituisce il conteggio (come valore intero con segno) dei limiti di datepart specificati superati tra la data di inizio specificata e data di fine .

Compatibilità

Secondo la documentazione Microsoft, questa funzione è compatibile con le seguenti versioni di SQL Server:

  1. SQL Server 2008 più
  2. Database SQL di Azure
  3. Data Warehouse SQL di Azure
  4. Data Warehouse parallelo

Sintassi

DATEDIFF ( datepart , startdate , enddate )

Datepart è qualsiasi parte della data come giorno, mese, anno, giorno della settimana, ora ecc.

Esempio 1:Comprensione della differenza in giorni

Cerchiamo di capire come funziona il DATEDIFF la funzione funziona.

Se proviamo a scoprire la differenza di giorni tra il 01 luglio 2018 e il 02 luglio 2018, otterremo 1 giorno, il che significa che sottrae la data di fine dalla data di inizio per ottenere la differenza:

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

Esempio 2:ottenere giorni tra l'ordine e la consegna

Definiamo due date diverse, Data dell'ordine e Data di consegna che verrà utilizzato per determinare la differenza in giorni, mesi, anni, ore ecc.

Per conoscere il numero di giorni tra la data dell'ordine e la data di consegna, la parte di data GIORNO viene passata nel DATEDIFF funzione seguita da Data inizio (Data ordine) e Data di fine (Data di consegna) :

-- Define Order Date and Order Delivery Date
DECLARE @OrderDate DATETIME2='28 July 2018'
DECLARE @DeliveryDate DATETIME2='07 August 2018'

SELECT @OrderDate AS OrderDate,@DeliveryDate as DeliveryDate-- Show Order and Delivery Dates

-- Getting difference in days between order date and delivery date
SELECT DATEDIFF(DAY,@OrderDate,@DeliveryDate) as Days_Between_Order_and_Delivery

Esempio 3:Ottenere le ore del progetto (monitoraggio del tempo)

Questo è un interessante esempio di rilevamento del tempo utilizzando la funzione DATEDIFF.

Ad esempio, siamo interessati a sapere quanti giorni e giorni totali in ore e giorni in minuti abbiamo speso per un particolare progetto, quindi passeremo prima la parte della data GIORNO nella funzione DATEDIFF, dove la data di inizio è la la data di inizio del progetto e la data di fine è la data odierna seguita dal passaggio dell'ORA e quindi dal passaggio del MINUTO come segue:

-- Define Project Start Date
DECLARE @ProjectStartDate DATETIME2='10 Nov 2018'


SELECT @ProjectStartDate AS ProjectStartDate-- Show Project Start Date

-- Getting Number of days spent on the project so far
SELECT DATEDIFF(DAY,@ProjectStartDate,GETDATE()) as Project_Days_So_Far
-- Getting Number of hours spent on the project so far
SELECT DATEDIFF(HOUR,@ProjectStartDate,GETDATE()) as Project_Hours_So_Far
-- Getting Number of minutes spent on the project so far
SELECT DATEDIFF(MINUTE,@ProjectStartDate,GETDATE()) as Project_Minutes_So_Far

Congratulazioni, hai imparato con successo a utilizzare le funzioni DATEADD, DATEDIFF e DATEPART T-SQL.

Cose da fare

Ora che hai familiarità con alcune funzioni di base della data, mettiti alla prova provando le cose menzionate di seguito:

  1. Si prega di fare riferimento al mio precedente articolo Procedure per i rapporti sui test unitari – Vai a Start TDDD Part-4 per impostare un database SQLDevBlogReportTDD di esempio, quindi creare una vista per scoprire il numero di mesi in base alla data di registrazione dell'autore.
  2. Si prega di fare riferimento al mio articolo precedente Semplificare la procedura memorizzata principale del test unitario che chiama anche una procedura di utilità per creare un database SQLBookShop di esempio e aggiungere la DeliveryDate nella colonna BookOrder tabella e quindi creare una nuova stored procedure ProcessOrder che utilizza DATEADD funzione per aggiungere la consegna prevista cinque giorni dopo la data dell'ordine.
  3. Si prega di dare un'occhiata al mio articolo precedente Vai all'inizio dello sviluppo di database basato su test (TDDD) – Parte 3 e prova a creare un report giornaliero utilizzando la funzione DATEADD T-SQL modificando i dati nel database di esempio SQLDevBlogReportTDD in modo che ci sono dati sufficienti per essere visualizzati nel rapporto.