DATEPART (Transact-SQL)DATEPART (Transact-SQL)

SI APPLICA A: SìSQL Server SìDatabase SQL di Azure SìAzure Synapse Analytics (SQL DW) SìParallel Data Warehouse APPLIES TO: YesSQL Server YesAzure SQL Database YesAzure Synapse Analytics (SQL DW) YesParallel Data Warehouse

Questa funzione restituisce un intero che rappresenta l'elemento datepart specificato dell'elemento date indicato.This function returns an integer representing the specified datepart of the specified date.

Vedere Funzioni e tipi di dati di data e ora (Transact-SQL) per una panoramica di tutti i tipi di dati e delle funzioni di data e ora di Transact-SQLTransact-SQL.See Date and Time Data Types and Functions (Transact-SQL) for an overview of all Transact-SQLTransact-SQL date and time data types and functions.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

DATEPART ( datepart , date )  

ArgomentiArguments

datepartdatepart
Parte specifica dell'argomento date per cui DATEPART restituirà un intero.The specific part of the date argument for which DATEPART will return an integer. Questa tabella elenca tutti gli argomenti validi per datepart.This table lists all valid datepart arguments.

Nota

DATEPART non accetta equivalenti di variabili definite dall'utente come argomenti di datepart.DATEPART does not accept user-defined variable equivalents for the datepart arguments.

datepartdatepart AbbreviazioniAbbreviations
yearyear yy, yyyyyy, yyyy
quarterquarter qq, qqq, q
monthmonth mm, mmm, m
dayofyeardayofyear dy, ydy, y
dayday dd, ddd, d
weekweek wk, wwwk, ww
weekdayweekday dwdw
hourhour hhhh
minuteminute mi, nmi, n
secondsecond ss, sss, s
millisecondmillisecond msms
microsecondmicrosecond mcsmcs
nanosecondnanosecond nsns
tzoffsettzoffset tztz
iso_weekiso_week isowk, isowwisowk, isoww

datedate
Espressione che si risolve in uno dei tipi di dati seguenti:An expression that resolves to one of the following data types:

  • datedate
  • datetimedatetime
  • datetimeoffsetdatetimeoffset
  • datetime2datetime2
  • smalldatetimesmalldatetime
  • timetime

Per date, DATEPART accetta un'espressione di colonna, un'espressione, un valore letterale stringa o una variabile definita dall'utente.For date, DATEPART will accept a column expression, expression, string literal, or user-defined variable. Per evitare problemi di ambiguità, esprimere gli anni nel formato a quattro cifre.Use four-digit years to avoid ambiguity issues. Per informazioni sugli anni a due cifre, vedere Configurare l'opzione di configurazione del server Cambio data per anno a due cifre.See Configure the two digit year cutoff Server Configuration Option for information about two-digit years.

Tipo restituitoReturn Type

intint

Valore restituitoReturn Value

Ogni elemento datepart e le relative abbreviazioni restituiscono lo stesso valore.Each datepart and its abbreviations return the same value.

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.The return value depends on the language environment set by using SET LANGUAGE, and by the Configure the default language Server Configuration Option of the login. Il valore restituito dipende da SET DATEFORMAT se date è un valore letterale stringa di alcuni formati.The return value depends on SET DATEFORMAT if date is a string literal of some formats. SET DATEFORMAT non modifica il valore restituito quando la data è un'espressione della colonna di un tipo di dati ora e data.SET DATEFORMAT does not change the return value when the date is a column expression of a date or time data type.

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').This table lists all datepart arguments, with corresponding return values, for the statement SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). L'argomento date ha un tipo di dati datetimeoffset(7) .The date argument has a datetimeoffset(7) data type. Le ultime due posizioni del valore restituito di nanosecond datepart sono sempre 00 e questo valore ha una scala di 9:The last two positions of the nanosecond datepart return value are always 00 and this value has a scale of 9:

.123456700.123456700

datepartdatepart Valore restituitoReturn value
year, yyyy, yyyear, yyyy, yy 20072007
quarter, qq, qquarter, qq, q 44
month, mm, mmonth, mm, m 1010
dayofyear, dy, ydayofyear, dy, y 303303
day, dd, dday, dd, d 3030
week, wk, wwweek, wk, ww 4444
weekday, dwweekday, dw 33
hour, hhhour, hh 1212
minute, nminute, n 1515
second, ss, ssecond, ss, s 3232
millisecond, msmillisecond, ms 123123
microsecond, mcsmicrosecond, mcs 123456123456
nanosecond, nsnanosecond, ns 123456700123456700
tzoffset, tztzoffset, tz 310310
iso_week, isowk, isowwiso_week, isowk, isoww 4444

Argomenti datepart per settimana e giorno ferialeWeek and weekday datepart arguments

Per un argomento datepart***week* (wk, ww) o weekday (dw), il valore restituito DATEPART dipende dal valore impostato da SET DATEFIRST.For a week (wk, ww) or weekday (dw) datepart, the DATEPART return value depends on the value set by SET DATEFIRST.

Il 1° gennaio di qualsiasi anno definisce il numero iniziale per week datepart.January 1 of any year defines the starting number for the week datepart. Ad esempio:For example:

DATEPART (wk, 'Jan 1, xxxx') = 1DATEPART (wk, 'Jan 1, xxxx') = 1

dove xxxx è un anno.where xxxx is any year.

Nella tabella seguente è riportato il valore restituito per week e weekday datepart per "2007-04-21" per ogni argomento SET DATEFIRST.This table shows the return value for the week and weekday datepart for '2007-04-21 ' for each SET DATEFIRST argument. L'1 gennaio 2007 cade di lunedì.January 1, 2007 falls on a Monday. Il 21 aprile 2007 cade di sabato.April 21, 2007 falls on a Saturday. Per l'inglese Stati Uniti,For U.S. English,

SET DATEFIRST 7 -- ( Sunday )

funge da valore predefinito.serves as the default. Dopo avere impostato DATEFIRST, usare questa istruzione SQL suggerita per i valori della tabella di datepart:After setting DATEFIRST, use this suggested SQL statement for the datepart table values:

SELECT DATEPART(week, '2007-04-21 '), DATEPART(weekday, '2007-04-21 ')

SET DATEFIRSTSET DATEFIRST

argomentoargument
weekweek

restituitoreturned
giorno ferialeweekday

restituitoreturned
11 1616 66
22 1717 55
33 1717 44
44 1717 33
55 1717 22
66 1717 11
77 1616 77

Argomenti datepart per anno, mese e giornoyear, month, and day datepart Arguments

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.The values that are returned for DATEPART (year, date), DATEPART (month, date), and DATEPART (day, date) are the same as those returned by the functions YEAR, MONTH, and DAY, respectively.

iso_week datepartiso_week datepart

ISO 8601 include il sistema settimana-relativo alla data ISO, un sistema di numerazione per settimane.ISO 8601 includes the ISO week-date system, a numbering system for weeks. Ogni settimana è associata all'anno che inizia con un giovedì.Each week is associated with the year in which Thursday occurs. Ad esempio, la settimana 1 del 2004 (2004W01) ha coperto il periodo da lunedì 29 dicembre 2003 a domenica 4 gennaio 2004.For example, week 1 of 2004 (2004W01) covered Monday, 29 December 2003 to Sunday, 4 January 2004. I paesi e le aree geografiche Europai usano in genere questo stile di numerazione.European countries / regions typically use this style of numbering. I paesi e le aree geografiche non Europai in genere non lo usano.Non-European countries / regions typically do not use it.

Nota: il numero massimo di settimane in un anno può essere 52 o 53.Note: the highest week number in a year could be either 52 or 53.

I sistemi di numerazione dei diversi paesi potrebbero non essere conformi allo standard ISO.The numbering systems of different countries/regions might not comply with the ISO standard. Questa tabella illustra sei possibilità:This table shows six possibilities:

Primo giorno della settimanaFirst day of week Prima settimana dell'annoFirst week of year contains Settimane assegnate due volteWeeks assigned two times Utilizzato da/inUsed by/in
SundaySunday 1 gennaio,1 January,

Primo sabato,First Saturday,

1-7 giorni dell'anno1-7 days of year
Yes Stati UnitiUnited States
MondayMonday 1 gennaio,1 January,

Prima domenica,First Sunday,

1-7 giorni dell'anno1-7 days of year
Yes La maggior parte di Europa e Regno UnitoMost of Europe and the United Kingdom
MondayMonday 4 gennaio,4 January,

Primo giovedì,First Thursday,

4-7 giorni dell'anno4-7 days of year
NoNo ISO 8601, Norvegia e SveziaISO 8601, Norway, and Sweden
MondayMonday 7 gennaio,7 January,

Primo lunedì,First Monday,

7 giorni dell'anno7 days of year
NoNo
WednesdayWednesday 1 gennaio,1 January,

Primo martedì,First Tuesday,

1-7 giorni dell'anno1-7 days of year
Yes
SabatoSaturday 1 gennaio,1 January,

Primo venerdì,First Friday,

1-7 giorni dell'anno1-7 days of year
Yes

tzoffsettzoffset

DATEPART restituisce il valore tzoffset (tz) come numero di minuti (firmato).DATEPART returns the tzoffset (tz) value as the number of minutes (signed). Questa istruzione restituisce una differenza di fuso orario di 310 minuti:This statement returns a time zone offset of 310 minutes:

SELECT DATEPART (tzoffset, '2007-05-10  00:00:01.1234567 +05:10');  

DATEPART esegue il rendering del valore tzoffset come segue:DATEPART renders the tzoffset value as follows:

  • Per datetimeoffset e datetime2, tzoffset restituisce la differenza di orario in minuti, in cui l'offset per datetime2 è sempre 0 minuti.For datetimeoffset and datetime2, tzoffset returns the time offset in minutes, where the offset for datetime2 is always 0 minutes.
  • Per i tipi di dati che possono essere convertiti in modo implicito in datetimeoffset o datetime2, DATEPART restituisce la differenza oraria in minuti.For data types that can implicitly convert to datetimeoffset or datetime2, DATEPART returns the time offset in minutes. Eccezione: altri tipi di dati date/time.Exception: other date / time data types.
  • I parametri di tutti gli altri tipi generano un errore.Parameters of all other types result in an error.

Argomento date smalldatetimesmalldatetime date Argument

Per un valore smalldatetime date, DATEPART restituisce i secondi come 00.For a smalldatetime date value, DATEPART returns seconds as 00.

Valore predefinito restituito per un datepart non incluso nell'argomento dateDefault Returned for a datepart That Is Not in a date Argument

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.If the date argument data type does not have the specified datepart, DATEPART will return the default for that datepart only when a literal is specified for date.

Ad esempio, l'anno-mese-giorno predefinito per qualsiasi tipo di dati date è 1900-01-01.For example, the default year-month-day for any date data type is 1900-01-01. Questa istruzione include gli argomenti datepart per datepart, un argomento time per date e restituisce 1900, 1, 1, 1, 2.This statement has date part arguments for datepart, a time argument for date, and it returns 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.If date is specified as a variable or table column, and the data type for that variable or column does not have the specified datepart, DATEPART will return error 9810. In questo esempio la variabile @t ha il tipo di dati time.In this example, variable @t has a time data type. L'esempio ha esito negativo perché la parte della data year non è valida per il tipo di dati time:The example fails because the date part year is invalid for the time data type:

DECLARE @t time = '12:10:30.123';   
SELECT DATEPART(year, @t);  

Secondi frazionariFractional seconds

Queste istruzioni illustrano che DATEPART restituisce secondi frazionari:These statements show that DATEPART returns fractional seconds:

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  

OsservazioniRemarks

DATEPART può essere usato nelle clausole select list, WHERE, HAVING, GROUP BY e ORDER BY.DATEPART can be used in the select list, WHERE, HAVING, GROUP BY, and ORDER BY clauses.

DATEPART consente di eseguire in modo implicito il cast di valori letterali stringa in un tipo datetime2 in SQL Server 2019 (15.x)SQL Server 2019 (15.x).DATEPART implicitly casts string literals as a datetime2 type in SQL Server 2019 (15.x)SQL Server 2019 (15.x). Pertanto, DATENAME non supporta il formato AGM se la data viene passata come stringa.This means that DATENAME does not support the format YDM when the date is passed as a string. Per usare il formato AGM è necessario eseguire il cast della stringa in modo esplicito in un tipo datetime o smalldatetime.You must explicitly cast the string to a datetime or smalldatetime type to use the YDM format.

EsempiExamples

In questo esempio viene restituito l'anno di base.This example returns the base year. L'anno di base è utile nei calcoli delle date.The base year helps with date calculations. Nell'esempio un numero specifica la data.In the example, a number specifies the date. Si noti che SQL ServerSQL Server interpreta il valore 0 come 1 gennaio 1900.Notice that SQL ServerSQL Server interprets 0 as January 1, 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.This example returns the day part of the date 12/20/1974.

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (day,'12/20/1974') FROM dbo.DimCustomer;  

Questo è il set di risultati.Here is the result set.

--------
20

Questo esempio restituisce la parte relativa all'anno della data 12/20/1974.This example returns the year part of the date 12/20/1974.

-- Uses AdventureWorks  
  
SELECT TOP(1) DATEPART (year,'12/20/1974') FROM dbo.DimCustomer;  

Questo è il set di risultati.Here is the result set.

--------
1974

Vedere ancheSee also

CAST e CONVERT (Transact-SQL)CAST and CONVERT (Transact-SQL)