Le funzioni di data di SQL server forniscono un insieme di funzioni che è possibile utilizzare per manipolare le date. La funzione viene utilizzata per un’ampia varietà di operazioni come l’aggiunta di settimane a una data, il calcolo della differenza tra due date o la scomposizione di una data nelle sue parti fondamentali.
Se non hai familiarità con le funzioni SQL, ti consiglio di fissare l’introduzione alle funzioni integrate di SQL Server.
Per ottenere il massimo da questa e dalle altre nostre lezioni, assicurati di esercitarti usando gli esempi!,
Tutti gli esempi di questa lezione sono basati su Microsoft SQL Server Management Studio e il database AdventureWorks2012. È possibile iniziare a utilizzare questi strumenti gratuiti utilizzando la mia guida Per iniziare a utilizzare SQL Server.
Introduzione alle funzioni di data di SQL Server
Ci sono oltre venticinque diverse funzioni classificate come funzioni di data in SQL server.
Tutte le funzioni sono elencate nella pagina Funzioni data (Transact-SQL). Consiglierei di visitare quella pagina per conoscere ogni funzione.,
Piuttosto che ribadire quel materiale, ci concentreremo sulle funzioni che ho visto in comunemente usate nel mondo degli affari.
Nelle seguenti tabelle ho classificato le funzioni e le ho codificate a colori. Il codice colore corrisponde al cappuccio probabile che si utilizzerebbe quella particolare funzione in un ambiente aziendale. Il verde è più probabile che venga utilizzato e il rosso meno.
Questa non è una scala rigorosa e tutte le funzioni hanno un uso in alcuni casi aziendali, ma volevo un modo per aiutarti a ridurre il campo a quelli più rilevanti.,
Ecco il mio tentativo:
Funzioni utilizzate per ottenere la Data Corrente e l’Ora
Di tutte le funzioni che vengono utilizzate per restituire la data e l’ora corrente, la funzione GETDATE è la funzione più comunemente utilizzata.
GETDATE
La funzione GETDATE viene utilizzata per restituire i dati e l’ora correnti del server. Questa funzione diventa utile quando è necessario confrontare i dati come l’ultima data di pagamento con la data corrente.,
La forma generale della funzione GETDATE è
GETDATE()
Ecco un esempio usando GETDATE
SELECT GETDATE()
Che restituisce 2015-08-09 21:55:00.477
Un esempio più utile è usare GETDATE con DATEDIFF o DATEADD. Scopri DATEDIFF per un esempio più completo.
Funzioni per ottenere parti di data
Le parti di data si riferiscono a vari componenti di una data come l’anno, il mese o il giorno. Le parti della data sono utilizzate in diverse funzioni in questa sezione e in altre., Ecco una tabella di parti di data che è possibile utilizzare in funzione come DATENAME, DATEPART, DATEDIFF e DATEADD.
I nomi sono abbastanza auto-esplicativi. Ogni parte della data corrisponde a un periodo ben noto come il mese o l’ora.
DATENAME
DATENAME è una funzione molto utile che viene utilizzata per restituire varie parti di una data come il nome del mese o il giorno della settimana corrispondente a una data particolare.,
La forma generale di DATENAME è
DATENAME(date part, value)
Dove la parte data corrisponde a un elenco di parti predefinite e il valore è la data con cui si sta lavorando.
Questa funzione restituisce un valore di carattere.
Ecco un esempio che mostra varie parti della data in azione.
Supponendo GETDATE restituisce 2015-08-10 12:56:25.313 l’esempio di risultati di query
Nota: Ci sono molte altre parti della data è possibile utilizzare con DATENAME., È possibile trovare un elenco completo sul sito MSDN.
Ecco un esempio che mostra come è possibile utilizzare DATANAME per eseguire alcune analisi a livello di riepilogo degli ordini.
Supponiamo che il responsabile vendite desideri un riepilogo delle vendite settimanali. Utilizzando la funzione DATENAME possiamo fornire tali informazioni.
Ecco i risultati
voglio sottolineare, che anche se siamo ordinati per anno e la settimana, le settimane sembrano essere fuori ordine., Questo perché OrderWeek restituito è un valore di carattere. Per ordinare quindi numericamente dobbiamo convertire il risultato in un valore numerico.
Potremmo facilmente convertire il valore all’interno della clausola ORDER BY, ma ciò non è necessario una volta appreso di DATEPART
DATEPART
Restituisce un numero intero che rappresenta la parte specificata di una data. Funziona in modo molto simile a DATENAME, in quanto si specifica una parte e un valore di data, tuttavia, piuttosto che restituire un valore di testo, come “Luglio”, restituisce 7.,
La forma generale di DATEPART è
DATEPART(date part, value)
Dove la parte data corrisponde a un elenco di parti predefinite e il valore è la data con cui si sta lavorando.
Questa funzione restituisce un numero intero.
Ecco un esempio che mostra varie parti della data in azione.
Supponendo GETDATE restituisce 2015-08-10 12:56:25.313 l’esempio di risultati di query
Nota: Ci sono molte altre parti della data è possibile utilizzare con DATEPART., È possibile trovare un elenco completo sul sito MSDN.
Possiamo anche ottenere un riepilogo dei totali di vendita utilizzando DATEPART come abbiamo fatto per DATENAME. Questa è la query
Si noti che questi risultati sono ordinati in modo corretto in base alla settimana:
il GIORNO, il MESE, l’ANNO
Il GIORNO, il MESE, il e l’ANNO funzioni di rendimento, sulla base di una data, il giorno, il mese o l’anno come numero intero.
La forma generale è la stessa per tutte e tre le funzioni., Per brevità mostreremo solo il GIORNO, le altre due funzioni funzionano in modo simile.
Ecco la sua forma generale:
DAY(value)
Dove il valore è la data con cui lavorare.
Ecco un esempio che mostra queste funzioni in gioco
SELECT HireDate, YEAR(HireDate) as HireYear, MONTH(HireDate) HireMonth, DAY(HireDate) as HireDayFROM HumanResources.Employee
i Cui risultati sono:
avrete notato che ANNO(valore) è breve mano DATEPART(anno, valore)., Entrambi restituiscono lo stesso risultato, ecco un’istruzione SQL che puoi provare:
SELECT HireDate, YEAR(HireDate) as HireYear, DATEPART(year, HireDate) as HireYearFromDatePartFROM HumanResources.Employee
Troverai equivalenze simili per MESE e GIORNO.
Modificare e trovare la differenza nelle date
DATEDIFF
La funzione DATEDIFF restituisce il numero di anni, mesi, settimane o giorni tra due date.
La forma generale per DATEDIFF è
DATEDIFF(date part, start value, end value)
Dove la parte data corrisponde a un elenco di parti date predefinite come anno, mese, settimane e giorni.
La differenza viene calcolata tra il valore iniziale e il valore finale.,
Questa funzione può sembrare un po ‘ complicata, ma vale davvero la pena capirla in quanto ha molti usi pratici in SQL.
Puoi usarlo per calcolare il numero di giorni in cui una fattura è scaduta o il numero di giorni o settimane tra due date.
Considera questo esempio:
Il Vice Presidente delle risorse Umane vuole premiare tutti i dipendenti con un premio anni di servizio. Lei vorrebbe di prodotto un rapporto di tutti i dipendenti con più di dieci anni di servizio.,
Per fare questo useremo il rapporto DATEDIFF sia per visualizzare il numero di anni di servizio e anche per filtrare quelli con meno di dieci anni di servizio.
Ecco il SQL
SELECT NationalIDNumber, HireDate, DATEDIFF(year, HireDate, GETDATE()) YearsOfServiceFROM HumanResources.EmployeeWHERE DATEDIFF(year, HireDate, GETDATE()) >= 10ORDER BY YearsOfService DESC
i Cui risultati sono
DATEADD
La funzione DATEADD è utilizzato per aggiungere anni, mesi, settimane o giorni tra una data.,
Il modulo generale per DATEADD è
DATEADD(parte data, numero, valore)
Dove la parte data corrisponde a un elenco di parti date predefinite come anno, mese, settimane e giorni e il numero specifica il numero di parti date da aggiungere al valore.
Se il numero è positivo, quel numero di parti di data viene aggiunto al valore.
Se il numero è negativo, allora in vigore le parti di data vengono sottratti dal valore.
Questa funzione può sembrare un po ‘ complicata, ma vale davvero la pena capirla in quanto ha molti usi pratici in SQL.,
È possibile utilizzarlo per calcolare il numero di giorni fino a quando la fattura è scaduta, o il numero di giorni o settimane nel futuro o passato.
Considera questo esempio:
Il responsabile delle vendite ha parlato con il responsabile della produzione della vendita di articoli sul web. Vogliono produrre le moto come sono ordinati. Se le bici sono state ordinate oggi, quando potrebbero essere disponibili per la spedizione al cliente?
Se guardi la tabella dei prodotti vedrai che c’è un campo DaysToManufacture. Usando questo con DATEADD in combinazione con GETDATE () possiamo calcolare il numero di giorni nel futuro.,
SELECT NAME, DaysToManufacture, GETDATE() as Today, DATEADD(day, DaysToManufacture, GETDATE()) EarliestDateFROM Production.ProductWHERE DaysToManufacture > 1
The results for this are