DATEPART (Transact-SQL)
Restituisce un numero intero che rappresenta il valore datepart dell'argomento date specificato.
Per una panoramica di tutti i tipi di dati e delle funzioni di data e ora Transact-SQL, vedere Funzioni e tipi di dati di data e ora (Transact-SQL).
Convenzioni della sintassi Transact-SQL
Sintassi
DATEPART ( datepart , date )
Argomenti
datepart
Parte di date (un valore di data o ora) per la quale verrà restituito un integer. Nella tabella seguente vengono elencati tutti gli argomenti datepart validi. Variabili definite dall'utente equivalenti non sono valide.datepart
Abbreviazioni
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 può essere risolta in un valore di tipo time, date, smalldatetime, datetime, datetime2 o datetimeoffset. date può essere costituito da un'espressione, da un'espressione di colonna, da una variabile definita dall'utente o da un valore letterale stringa.Per evitare ambiguità, esprimere gli anni nel formato a quattro cifre. Per informazioni sul formato dell'anno a due cifre, vedere Configurare l'opzione di configurazione del server two-digit year cutoff.
Tipo restituito
int
Valore restituito
Ogni valore datepart e le relative abbreviazioni restituiscono lo stesso valore.
Il valore restituito dipende dalla lingua impostata tramite SET LANGUAGE e Configurare l'opzione di configurazione del server default language dell'account di accesso. Se date è un valore letterale stringa per alcuni formati, il valore restituito dipende dal formato specificato utilizzando SET DATEFORMAT. SET DATEFORMAT non influisce sul valore restituito quando la data è un'espressione della colonna di un tipo di dati ora e data.
Nella tabella seguente sono elencati tutti gli argomenti datepart con i corrispondenti valori restituiti per l'istruzione SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). Il tipo di dati dell'argomento date è datetimeoffset(7). Il valore restituito utilizzando nanosecond datepart ha una scala di 9 (.123456700) e le ultime due posizioni sono sempre 00.
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 |
45 |
weekday, dw |
1 |
hour, hh |
12 |
minute, n |
15 |
second, ss, s |
32 |
millisecond, ms |
123 |
microsecond, mcs |
123456 |
nanosecond, ns |
123456700 |
TZoffset, tz |
310 |
Argomenti datepart per settimana e giorno feriale
Quando datepart è week (wk, ww) o weekday (dw), il valore restituito dipende dal valore impostato utilizzando SET DATEFIRST.
Il 1° gennaio di qualsiasi anno definisce il numero iniziale per week datepart, ad esempio DATEPART (wk, 1 gen, xxxx) = 1, dove xxxx è qualsiasi anno.
Nella tabella seguente è elencato il valore restituito per week e weekday datepartper '2007-04-21' per ogni argomento SET DATEFIRST. Il 1° gennaio è un lunedì nell'anno 2007. Il 21 aprile dell'anno 2007 è sabato. SET DATEFIRST 7, domenica è l'impostazione predefinita per gli Stati Uniti. Regno Unito,
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.
datepart ISO_WEEK
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) è iniziata lunedì 29 dicembre 2003 ed è terminata domenica 4 gennaio 2004. In un anno è possibile avere al massimo 52 o 53 settimane. Questo stile di numerazione viene in genere utilizzato nei paesi europei, raramente viene usato altrove.
Il sistema di numerazione nei diversi paesi potrebbe non essere conforme allo standard ISO. Ci sono almeno sei possibilità come mostra la tabella seguente
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ì, 7 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
TZoffset (tz) viene restituito come numero di minuti (firmato). Nell'istruzione seguente è restituita una differenza di fuso orario di 310 minuti.
SELECT DATEPART (TZoffset, 2007-05-10 00:00:01.1234567 +05:10);
Se l'argomento datepart è TZoffset (tz) e l'argomento date non è di tipo di dati datetimeoffset, viene restituito il valore NULL.
Argomento date smalldatetime
Quando date è smalldatetime, i secondi vengono restituiti come 00.
Valore predefinito restituito per un datepart non incluso nell'argomento date
Se per il tipo di dati dell'argomento date non è specificato datepart, verrà restituita l'impostazione predefinita per datepart solo se un valore letterale è specificato per date.
Ad esempio, l'anno-mese-giorno predefinito per qualsiasi tipo di dati date è 1900-01-01. L'istruzione seguente include gli argomenti datepart per datepart e 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 della tabella e per il tipo di dati per quella variabile o colonna non viene specificato datepart, viene restituito l'errore 9810. L'esempio di codice riportato di seguito ha esito negativo perché la parte di data anno non è valida per il tipo di dati time dichiarato per la variabile @t.
DECLARE @t time = '12:10:30.123';
SELECT DATEPART(year, @t);
Secondi frazionari
Secondi frazionari vengono restituiti come indicato nelle istruzioni seguenti:
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
È possibile utilizzare DATEPART in un elenco di selezione e nelle clausole WHERE, HAVING, GROUP BY e ORDER BY.
In SQL Server 2012 DATEPART consente di eseguire in modo implicito il cast di valori letterali stringa come tipo datetime2. Pertanto, DATEPART non supporta il formato AGM se la data viene passata come stringa. È necessario eseguire il cast in modo esplicito della stringa in un tipo datetime o smalldatetime per utilizzare il formato AGM.
Esempi
Nell'esempio seguente viene restituito il valore dell'anno di base. L'anno di base è utile per i calcoli relativi alla data. Nell'esempio seguente, la data viene specificata sotto forma di numero. 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 */