DATEPART (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)
Questa funzione restituisce un intero che rappresenta l'elemento datepart specificato dell'elemento date indicato.
Per una panoramica di tutti i tipi di dati e funzioni di data e ora Transact-SQL, vedere Funzioni e tipi di dati di data e ora (Transact-SQL).
Convenzioni relative alla sintassi Transact-SQL
Sintassi
DATEPART ( datepart , date )
Argomenti
datepart
Parte specifica dell'argomento date per cui DATEPART
restituirà un intero. Questa tabella elenca tutti gli argomenti validi per datepart.
Nota
DATEPART
non accetta equivalenti di variabili definite dall'utente come argomenti di datepart.
datepart | Abbreviations |
---|---|
year | yy, yyyy |
quarter | qq, q |
month | mm, m |
dayofyear | dy, y |
day | dd, d |
week | wk, ww |
weekday | dw |
hour | hh |
minute | mi, n |
second | ss, s |
millisecond | ms |
microsecond | mcs |
nanosecond | ns |
tzoffset | tz |
iso_week | isowk, isoww |
date
Espressione che si risolve in uno dei tipi di dati seguenti:
- date
- datetime
- datetimeoffset
- datetime2
- smalldatetime
- time
Per date, DATEPART
accetta un'espressione di colonna, un'espressione, un valore letterale stringa o una variabile definita dall'utente. Per evitare problemi di ambiguità, esprimere gli anni nel formato a quattro cifre. Per informazioni sugli anni a due cifre, vedere Configurare l'opzione di configurazione del server Cambio data per anno a due cifre.
Tipo restituito
int
Valore restituito
Ogni elemento datepart e le relative abbreviazioni restituiscono lo stesso valore.
Il valore restituito dipende dalla lingua impostata tramite SET LANGUAGE e in Configurare l'opzione di configurazione del server default language dell'account di accesso. Il valore restituito dipende da SET DATEFORMAT se date è un valore letterale stringa di alcuni formati. SET DATEFORMAT non modifica il valore restituito quando la data è un'espressione della colonna di un tipo di dati ora e data.
Questa tabella elenca tutti gli argomenti datepart, con i corrispondenti valori restituiti, per l'istruzione SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10')
. L'argomento date ha un tipo di dati datetimeoffset(7). Le ultime due posizioni del valore restituito di nanosecond datepart sono sempre 00
e questo valore ha una scala di 9:
.123456700
datepart | Valore restituito |
---|---|
year, yyyy, yy | 2007 |
quarter, qq, q | 4 |
month, mm, m | 10 |
dayofyear, dy, y | 303 |
day, dd, d | 30 |
week, wk, ww | 44 |
weekday, dw | 3 |
hour, hh | 12 |
minute, n | 15 |
second, ss, s | 32 |
millisecond, ms | 123 |
microsecond, mcs | 123456 |
nanosecond, ns | 123456700 |
tzoffset, tz | 310 |
iso_week, isowk, isoww | 44 |
Argomenti datepart per settimana e giorno feriale
Per un argomento datepartweek (wk, ww) o weekday (dw), il valore restituito DATEPART
dipende dal valore impostato da SET DATEFIRST.
Il 1° gennaio di qualsiasi anno definisce il numero iniziale per week datepart. Ad esempio:
DATEPART (wk, 'Jan 1, xxxx') = 1
dove xxxx è un anno.
Nella tabella seguente è riportato il valore restituito per week e weekday datepart per "2007-04-21" per ogni argomento SET DATEFIRST. L'1 gennaio 2007 cade di lunedì. Il 21 aprile 2007 cade di sabato. Per l'inglese statunitense,
SET DATEFIRST 7 -- ( Sunday )
funge da valore predefinito. Dopo avere impostato DATEFIRST, usare questa istruzione SQL suggerita per i valori della tabella di datepart:
SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')
SET DATEFIRST Argomento |
settimana restituito |
giorno feriale restituito |
---|---|---|
1 | 16 | 6 |
2 | 17 | 5 |
3 | 17 | 4 |
4 | 17 | 3 |
5 | 17 | 2 |
6 | 17 | 1 |
7 | 16 | 7 |
Argomenti datepart per anno, mese e giorno
I valori restituiti per DATEPART (year, date), DATEPART (month, date) e DATEPART (day, date) corrispondono a quelli restituiti rispettivamente dalle funzioni YEAR, MONTH e DAY.
iso_week datepart
ISO 8601 include il sistema settimana-relativo alla data ISO, un sistema di numerazione per settimane. Ogni settimana è associata all'anno che inizia con un giovedì. Ad esempio, la settimana 1 del 2004 (2004W01) ha coperto il periodo da lunedì 29 dicembre 2003 a domenica 4 gennaio 2004. I paesi/aree europee usano in genere questo stile di numerazione. I paesi/aree geografiche non europei in genere non lo usano.
Nota: il numero massimo di settimane in un anno può essere 52 o 53.
I sistemi di numerazione dei diversi paesi potrebbero non essere conformi allo standard ISO. Questa tabella illustra sei possibilità:
Primo giorno della settimana | Prima settimana dell'anno | Settimane assegnate due volte | Utilizzato da/in |
---|---|---|---|
Domenica | 1 gennaio, Primo sabato, 1-7 giorni dell'anno |
Sì | Stati Uniti |
lunedì | 1 gennaio, Prima domenica, 1-7 giorni dell'anno |
Sì | La maggior parte di Europa e Regno Unito |
lunedì | 4 gennaio, Primo giovedì, 4-7 giorni dell'anno |
No | ISO 8601, Norvegia e Svezia |
lunedì | 7 gennaio, Primo lunedì, Sette giorni dell'anno |
No | |
mercoledì | 1 gennaio, Primo martedì, 1-7 giorni dell'anno |
Sì | |
Sabato | 1 gennaio, Primo venerdì, 1-7 giorni dell'anno |
Sì |
tzoffset
DATEPART
restituisce il valore tzoffset (tz) come numero di minuti (firmato). Questa istruzione restituisce una differenza di fuso orario di 310 minuti:
SELECT DATEPART (tzoffset, '2007-05-10 00:00:01.1234567 +05:10');
DATEPART
esegue il rendering del valore tzoffset come segue:
- Per datetimeoffset e datetime2, tzoffset restituisce la differenza di orario in minuti, in cui l'offset per datetime2 è sempre 0 minuti.
- Per i tipi di dati che possono essere convertiti in modo implicito in datetimeoffset o datetime2,
DATEPART
restituisce la differenza oraria in minuti. Eccezione: altri tipi di dati date/time. - I parametri di tutti gli altri tipi generano un errore.
Argomento date smalldatetime
Per un valore smalldatetime date, DATEPART
restituisce i secondi come 00.
Valore predefinito restituito per un datepart non incluso nell'argomento date
Se per il tipo di dati dell'argomento date non viene specificato datepart, DATEPART
restituirà il valore predefinito per datepart solo se è stato specificato un valore letterale per date.
Ad esempio, l'anno-mese-giorno predefinito per qualsiasi tipo di dati date è 1900-01-01. Questa istruzione include gli argomenti datepart per datepart, un argomento time per date e restituisce 1900, 1, 1, 1, 2
.
SELECT DATEPART(year, '12:10:30.123')
,DATEPART(month, '12:10:30.123')
,DATEPART(day, '12:10:30.123')
,DATEPART(dayofyear, '12:10:30.123')
,DATEPART(weekday, '12:10:30.123');
Se date viene specificato come variabile o colonna di tabella e per il tipo di dati della variabile o della colonna datepart non viene specificato, DATEPART
restituirà l'errore 9810. In questo esempio la variabile @t ha il tipo di dati time. L'esempio ha esito negativo perché la parte della data year non è valida per il tipo di dati time:
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Secondi frazionari
Queste istruzioni illustrano che DATEPART
restituisce secondi frazionari:
SELECT DATEPART(millisecond, '00:00:01.1234567'); -- Returns 123
SELECT DATEPART(microsecond, '00:00:01.1234567'); -- Returns 123456
SELECT DATEPART(nanosecond, '00:00:01.1234567'); -- Returns 123456700
Osservazioni:
DATEPART
può essere usato nelle clausole select list, WHERE, HAVING, GROUP BY e ORDER BY.
DATEPART esegue il cast implicito dei valori letterali stringa come tipo datetime2 in SQL Server 2008 (10.0.x) e versioni successive. Pertanto, DATENAME non supporta il formato AGM se la data viene passata come stringa. Per usare il formato AGM è necessario eseguire il cast della stringa in modo esplicito in un tipo datetime o smalldatetime.
Esempi
In questo esempio viene restituito l'anno di base. L'anno di base è utile nei calcoli delle date. Nell'esempio un numero specifica la data. Si noti che SQL Server interpreta il valore 0 come 1 gennaio 1900.
SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);
-- Returns: 1900 1 1
Questo esempio restituisce la parte relativa al giorno della data 12/20/1974
.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 20
Questo esempio restituisce la parte relativa all'anno della data 12/20/1974
.
-- Uses AdventureWorks
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;
-- Returns: 1974