Condividi tramite


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
Stati Uniti
lunedì 1 gennaio,

Prima domenica,

1-7 giorni dell'anno
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
Sabato 1 gennaio,

Primo venerdì,

1-7 giorni dell'anno

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

Vedi anche

CAST e CONVERT (Transact-SQL)DATETRUNC