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

6 funzioni per ottenere il giorno, il mese e l'anno da una data in SQL Server

Transact-SQL include una serie di funzioni che ci aiutano a lavorare con date e orari. Una delle attività più comuni quando si lavora con le date è estrarre le diverse parti della data. Ad esempio, a volte vogliamo solo l'anno o il mese. Altre volte potremmo volere il giorno della settimana. Ad ogni modo, ci sono molti modi per farlo in SQL Server.

In particolare, le seguenti funzioni consentono di restituire il giorno, il mese e l'anno da una data in SQL Server.

  • DAY() , MONTH() e YEAR()
  • DATEPART()
  • DATENAME()
  • FORMAT()

Queste funzioni sono spiegate di seguito.

Le funzioni GIORNO(), MESE() e ANNO()

Il modo più ovvio per restituire il giorno, il mese e l'anno da una data è utilizzare le funzioni T-SQL con lo stesso nome. Sì, T-SQL ha funzioni create appositamente allo scopo di restituire queste tre parti di date.

Ecco un esempio di come funzionano:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DAY(@date) AS DAY,
    MONTH(@date) AS MONTH,
    YEAR(@date) AS YEAR;

Risultato:

+-------+---------+--------+
| DAY   | MONTH   | YEAR   |
|-------+---------+--------|
| 2     | 6       | 2018   |
+-------+---------+--------+

Queste funzioni restituiscono il datepart come numero intero. Restituiscono lo stesso risultato di DATEPART() la funzione restituisce per la parte data specificata.

La funzione DATEPART()

Il DATEPART() la funzione è stata creata appositamente per restituire parti specificate di una data. Pertanto, possiamo utilizzare questa funzione per restituire esattamente lo stesso risultato dell'esempio precedente:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATEPART(day, @date) AS DAY,
    DATEPART(weekday, @date) AS WEEKDAY,
    DATEPART(month, @date) AS MONTH,
    DATEPART(year, @date) AS YEAR;

Risultato:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | 7         | 6       | 2018   |
+-------+-----------+---------+--------+

Un vantaggio dell'utilizzo di questa funzione è che puoi anche restituire altre parti della data e dell'ora. Come puoi vedere con questo esempio, ho restituito il giorno della settimana e il giorno (day è il giorno del mese, weekday è il giorno della settimana). Puoi anche restituire le varie parti temporali, come minuti, secondi, millisecondi, ecc. Per altri esempi, vedere DATEPART() Esempi in SQL Server.

Il DATEPART() La funzione restituisce il risultato come numero intero e, pertanto, non sarai in grado di ottenere il nome del mese o del giorno della settimana dalla data. Ma non preoccuparti, puoi utilizzare il DATENAME() o FORMAT() funzioni per questo.

La funzione DATENAME()

Il DATENAME() la funzione è simile a DATEPART() funzione, tranne per il fatto che restituisce il risultato come una stringa di caratteri anziché un numero intero. DATENAME() restituisce anche il mese e il giorno della settimana come nome completo, anziché come valore numerico.

Esempio:

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    DATENAME(day, @date) AS DAY,
    DATENAME(weekday, @date) AS WEEKDAY,
    DATENAME(month, @date) AS MONTH,
    DATENAME(year, @date) AS YEAR;

Risultato:

+-------+-----------+---------+--------+
| DAY   | WEEKDAY   | MONTH   | YEAR   |
|-------+-----------+---------+--------|
| 2     | Saturday  | June    | 2018   |
+-------+-----------+---------+--------+

Per ulteriori esempi di questa funzione, vedere DATENAME() Esempi in SQL Server.

La funzione FORMAT()

Possiamo usare il FORMAT() funzione per restituire gli stessi valori di DATENAME() funzione e altro.

Questa è una funzione più versatile rispetto alle precedenti. Consente di formattare data/ora e valori numerici come stringhe. Il valore restituito è nvarchar o null (a seconda dell'input) e la lunghezza della stringa è determinata dal formato specificato.

FORMAT() fornisce anche più opzioni su come viene presentato il datepart. Puoi specificare se visualizzarlo come un singolo carattere, due caratteri, tre, quattro e anche cinque in alcuni casi.

Ecco degli esempi da dimostrare.

Giorno

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS d,
    FORMAT(@date, 'dd') AS dd,
    FORMAT(@date, 'ddd') AS ddd,
    FORMAT(@date, 'dddd') AS dddd;

Risultato:

+-----+------+-------+----------+
| d   | dd   | ddd   | dddd     |
|-----+------+-------+----------|
| 2   | 02   | Sat   | Saturday |
+-----+------+-------+----------+

Mese

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'M ') AS M,
    FORMAT(@date, 'MM') AS MM,
    FORMAT(@date, 'MMM') AS MMM,
    FORMAT(@date, 'MMMMM') AS MMMM;

Risultato:

+-----+------+-------+--------+
| M   | MM   | MMM   | MMMM   |
|-----+------+-------+--------|
| 6   | 06   | Jun   | June   |
+-----+------+-------+--------+

Anno

DECLARE @date datetime2 = '2018-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;

Risultato:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 18  | 18   | 2018  | 2018   | 02018   |
+-----+------+-------+--------+---------+

Nota che abbiamo la possibilità di formattare la parte dell'anno come cinque cifre.

Informazioni sul numero di cifre

Quando si restituisce una parte di data sotto forma di cifre, l'identificatore di formato determina il numero minimo di cifre da restituire. Ad esempio, quando utilizzi  yyy , l'anno verrà restituito come tre cifre se l'anno è 0008 ma come quattro cifre se l'anno è 2008 .

Esempio:

DECLARE @date datetime2 = '0008-06-02 08:24:14.3112042';
SELECT     
    FORMAT(@date, 'y ') AS y,
    FORMAT(@date, 'yy') AS yy,
    FORMAT(@date, 'yyy') AS yyy,
    FORMAT(@date, 'yyyy') AS yyyy,
    FORMAT(@date, 'yyyyy') AS yyyyy;  

Risultato:

+-----+------+-------+--------+---------+
| y   | yy   | yyy   | yyyy   | yyyyy   |
|-----+------+-------+--------+---------|
| 8   | 08   | 008   | 0008   | 00008   |
+-----+------+-------+--------+---------+

Inoltre, quando si utilizza l'opzione singola (ad es. d ) come identificatore di data, dovrai aggiungere uno spazio se desideri che solo la parte di data venga restituita da sola. Se non lo fai, otterrai più di quella singola datapart.

Esempio:

DECLARE @date datetime2 = '2008-06-02 08:24:14.3112042';
SELECT 
    FORMAT(@date, 'd ') AS 'Space',
    FORMAT(@date, 'd') AS 'No Space',
    FORMAT(@date, 'M ') AS 'Space',
    FORMAT(@date, 'M') AS 'No Space',
    FORMAT(@date, 'y ') AS 'Space',
    FORMAT(@date, 'y') AS 'No Space';

Risultato:

+---------+------------+---------+------------+---------+------------+
| Space   | No Space   | Space   | No Space   | Space   | No Space   |
|---------+------------+---------+------------+---------+------------|
| 2       | 6/2/2008   | 6       | June 2     | 8       | June 2008  |
+---------+------------+---------+------------+---------+------------+

Per ulteriori FORMAT() esempi, vedere Come formattare la data e l'ora in SQL Server.