Partilhar via


DATEPART (Transact-SQL)

Aplica-se a:Banco de Dados SQL doAzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsAnalytics Platform System (PDW)Banco de Dados SQL no Microsoft Fabric

Esta função devolve um inteiro que representa a data-parte especificada da data especificada.

Consulte Tipos de dados e funções de data e hora (Transact-SQL) para obter uma visão geral de todos os tipos de dados e funções de data e hora do Transact-SQL.

Transact-SQL convenções de sintaxe

Sintaxe

DATEPART ( datepart , date )  

Arguments

datepart
A parte específica do argumento de data para a qual DATEPART devolverá um inteiro. Esta tabela lista todos os argumentos datepart válidos.

Observação

DATEPART não aceita equivalentes de variáveis definidas pelo utilizador para os argumentos datepart .

datepart Abbreviations
ano aaa, aaaa
trimestre QQ, Q
mês Mm, M
Dia do Ano dy, y
Dia DD, D
semana WK, WW
Dias úteis dw
hora hh
minuto mi, n
segundo SS, S
milissegundos em
microssegundos MCS
nanossegundos NS
Tzoffset tz
iso_week isowk, isoww

date
Uma expressão que resolve para um dos seguintes tipos de dados:

  • date
  • datetime
  • datetimeoffset
  • datetime2
  • smalldatetime
  • time

Para data, DATEPART aceitará uma expressão de coluna, expressão, literal de cadeia de caracteres ou variável definida pelo usuário. Use anos de quatro dígitos para evitar problemas de ambiguidade. Consulte Configurar a opção de configuração do servidor de corte de ano de dois dígitos para obter informações sobre anos de dois dígitos.

Tipo de Retorno

int

Valor de retorno

Cada datepart e suas abreviaturas retornam o mesmo valor.

O valor de retorno depende do ambiente de linguagem definido usando SET LANGUAGE e da opção Configure a linguagem padrão Server Server Option do login. O valor de retorno depende de SET DATEFORMAT se date for um literal de cadeia de alguns formatos. O SET DATEFORMAT não altera o valor de retorno quando a data é uma expressão de coluna de um tipo de data ou hora.

Esta tabela lista todos os argumentos de partes de data , com valores de retorno correspondentes, para a afirmação SELECT DATEPART(datepart,'2007-10-30 12:15:32.1234567 +05:10'). O argumento date tem um tipo de dado datetimeoffset(7). As duas últimas posições do valor de retorno donanosegundo são sempre 00 e este valor tem uma escala de 9:

.123456700

datepart Valor de retorno
ano, yyyy, yy 2007
Quarto, Qq, Q 4
mês, mm, m 10
Dayofyear, Dy, Y 303
Dia, DD, D 30
semana, semana, ww 44
Durante a semana, DW 3
hora, hh 12
minuto, n 15
segundo, ss, s 32
milissegundo, sra. 123
Microssegundos, MCS 123456
nanossegundo, ns 123456700
Tzoffset, tz 310
iso_week, isowk, isoww 44

Discussões sobre a data durante a semana e durante a semana

Para uma data de semana (semana, ww) ou dia de semana (dw), o DATEPART valor de retorno depende do valor definido por SET DATEFIRST.

1 de janeiro de qualquer ano define o número inicial para a datada semana. Por exemplo:

DATEPART (semana, '1 de janeiro, xxxx') = 1

onde xxxx é qualquer ano.

Esta tabela mostra o valor de retorno para a semana e a datado dia útil para '2007-04-21' para cada argumento SET DATEFIRST. 1 de janeiro de 2007 cai numa segunda-feira. O dia 21 de abril de 2007 cai num sábado. Para o inglês dos EUA,

SET DATEFIRST 7 -- ( Sunday )

serve como padrão. Depois de definir o DATEFIRST, use esta instrução SQL sugerida para os valores da tabela datapart:

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

DEFINIR A DATA PRIMEIRO

argumento
semana

devolvido
Dia da semana

devolvido
1 16 6
2 17 5
3 17 4
4 17 3
5 17 2
6 17 1
7 16 7

ano, mês e dia parte de data Argumentos

Os valores devolvidos para DATEPART (ano, data), DATEPART (mês, data) e DATEPART (dia, data) são os mesmos que os devolvidos pelas funções YEAR, MONTH e DAY, respetivamente.

iso_week datepart

A ISO 8601 inclui o sistema de datas de semana ISO, um sistema de numeração para semanas. Cada semana está associada ao ano em que ocorre a quinta-feira. Por exemplo, a semana 1 de 2004 (2004W01) abrangeu de segunda-feira, 29 de dezembro de 2003 a domingo, 4 de janeiro de 2004. Os países/regiões europeias normalmente usam este estilo de numeração. Países/regiões não europeias normalmente não o utilizam.

Nota: o maior número semanal num ano pode ser 52 ou 53.

Os sistemas de numeração de diferentes países/regiões podem não cumprir a norma ISO. Esta tabela mostra seis possibilidades:

Primeiro dia da semana A primeira semana do ano contém Semanas atribuídas duas vezes Usado por/em
Domingo 1 de janeiro,

Primeiro sábado,

1 a 7 dias do ano
Yes Estados Unidos
Segunda-feira 1 de janeiro,

Primeiro domingo,

1 a 7 dias do ano
Yes Grande parte da Europa e do Reino Unido
Segunda-feira 4 de janeiro,

Primeira quinta-feira,

4-7 dias do ano
Não ISO 8601, Noruega e Suécia
Segunda-feira 7 de janeiro,

Primeira segunda-feira,

Sete dias do ano
Não
Quarta-feira 1 de janeiro,

Primeira terça-feira,

1 a 7 dias do ano
Yes
Sábado 1 de janeiro,

Primeira sexta-feira,

1 a 7 dias do ano
Yes

Tzoffset

DATEPART devolve o valor tzoffset (tz) como o número de minutos (assinados). Esta declaração apresenta um desfasamento de fuso horário de 310 minutos:

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

DATEPART Apresenta o valor tzoffset da seguinte forma:

  • Para datetimeoffset e datetime2, tzoffset devolve o deslocamento temporal em minutos, onde o deslocamento para datetime2 é sempre 0 minutos.
  • Para tipos de dados que podem converter implicitamente para datatimeoffset ou datetime2, DATEPART devolve o deslocamento temporal em minutos. Exceção: outros tipos de dados de data/hora.
  • Parâmetros de todos os outros tipos resultam num erro.

smalldatetime date Argumento

Para um valor DATEPARTde data de data pequena, devolve segundos como 00.

Default Devolvido para uma data que não está num argumento de data

Se o tipo de dado do argumento date não tiver a datapart especificada, DATEPART só devolverá o padrão para essa datepart quando um literal for especificado para data.

Por exemplo, o ano-mês-dia por defeito para qualquer tipo de data é 1900-01-01. Esta afirmação tem argumentos de data para datepart, um argumento de tempo para data, e devolve 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 a data for especificada como uma variável ou coluna de tabela, e o tipo de dado dessa variável ou coluna não tiver a data especificada, DATEPART devolverá o erro 9810. Neste exemplo, a variável @t tem um tipo de dado temporal . O exemplo falha porque a data do ano parcial é inválida para o tipo de dado temporal :

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

Segundos fracionários

Estas instruções mostram que DATEPART devolve frações de segundo:

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  

Observações

DATEPART podem ser usados nas cláusulas da lista de seleção WHERE, HAVING, GROUP BY, e ORDER BY.

O DATEPART projeta implicitamente literais de string como um tipo datetime2 no SQL Server 2008 (10.0.x) e posteriores. Isto significa que o DATENAME não suporta o formato YDM quando a data é passada como uma cadeia. Você deve converter explicitamente a cadeia de caracteres para um tipo datetime ou smalldatetime para usar o formato YDM.

Examples

Este exemplo devolve o ano base. O ano base ajuda nos cálculos das datas. No exemplo, um número especifica a data. Note que o SQL Server interpreta 0 como 1 de janeiro de 1900.

SELECT DATEPART(year, 0), DATEPART(month, 0), DATEPART(day, 0);  

-- Returns: 1900    1    1 

Este exemplo devolve a parte do dia da 12/20/1974data .

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

-- Returns: 20

Este exemplo devolve a parte do ano da data 12/20/1974.

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

-- Returns: 1974

Consulte também

CAST e CONVERT (Transact-SQL)DATETRUNC