datetime (Transact-SQL)

 

Publicado: dezembro de 2016

ESTE TÓPICO APLICA-SE A: simSQL Server (começando com o 2008)simBanco de Dados SQL do AzuresimAzure SQL Data Warehouse simParallel Data Warehouse

Define uma data combinada com uma hora do dia que inclui frações de segundos e se baseia em um período de 24 horas.

System_CAPS_ICON_note.jpg Observação


Use o tempo, data, datetime2 e datetimeoffset tipos de dados para o novo trabalho. Esses tipos estão de acordo com o SQL padrão. Eles são mais portáteis. tempo, datetime2 e datetimeoffset fornecem mais precisão em segundos. DateTimeOffset oferece suporte a fuso horário para aplicativos implantados globalmente.

PropriedadeValue
SintaxeData e hora
UsoDECLARAR @MyDatetime datetime

Criar tabela Table1 (Coluna1 datetime )
Formatos de literais de cadeia de caracteres padrão

(usado para cliente de nível inferior)
Não aplicável
Intervalo de datasJaneiro 1, 1753, a dezembro 31, 9999
Intervalo de horas00:00:00 por meio de 23:59:59.997
Intervalo de deslocamento de fuso horárioNenhuma
Intervalos de elementosAAAA são quatro dígitos de 1753 a 9999 que representam um ano.

MM são dois dígitos, variando de 01 a 12, que representam um mês do ano especificado.

DD são dois dígitos, variando de 01 a 31, dependendo do mês, que representam um dia do mês especificado.

hh são dois dígitos, variando de 00 a 23, que representam a hora.

mm são dois dígitos, variando de 00 a 59, que representam o minuto.

ss são dois dígitos, variando de 00 a 59, que representam o segundo.

n* vai de zero a três dígitos, variando de 0 a 999, representando as frações de segundo.
Comprimento de caracteres19 posições no mínimo e 23 no máximo
Tamanho de armazenamento8 bytes
PrecisãoOs valores são arredondados em incrementos de .000, .003 ou .007 segundos.
Valor padrão1900-01-01 00:00:00
CalendárioGregoriano (não inclui o intervalo completo de anos.)
Precisão de segundo fracionário definida pelo usuárioNão
Preservação e reconhecimento de deslocamento de fuso horárioNão
Reconhecimento de horário de verãoNão

As tabelas a seguir listam os formatos de literal de cadeia de caracteres com suporte para datetime. Exceto para ODBC, datetime literais de cadeia de caracteres forem aspas simples ('), por exemplo, 'string_literaL'. Se o ambiente não for us_english, os literais de cadeia de caracteres devem estar no formato 'string_literaL'.

NuméricoDescription
Formatos de data:

[0]4/15/[19]96--(mda)

[0]4-15-[19]96 -- (mda)

[0]4.15.[19]96 -- (mda)

[0]4/[19]96/15 -- (mad)

15/[0]4/[19]96 -- (dma)

15/[19]96/[0]4 -- (dam)

[19]96/15/[0]4 -- (adm)

[19]96/[0]4/15 -- (amd)

Formatos de hora:

14:30

14:30[:20:999]

14:30[:20.9]

4am

4 PM
Você pode especificar dados de data com um mês numérico especificado. Por exemplo, 5/20/97 representa o vigésimo dia de maio de 1997. Ao usar um formato de data numérico, especifique o mês, o dia e o ano em uma cadeia de caracteres com barras (/), hífens (-) ou pontos (.) como separadores. Essa cadeia de caracteres deve ser exibida da seguinte forma:

 número separador número separador número [time] [time]

 

Quando o idioma é definido como us_english, a ordem padrão para a data é MDA. Você pode alterar a ordem de data usando o SET DATEFORMAT instrução.

A configuração de SET DATEFORMAT determina como são interpretados os valores de data. Se a ordem não corresponder à configuração, os valores não serão interpretados como datas, porque eles estarão fora do intervalo ou serão mal-interpretados. Por exemplo, 12/10/08 pode ser interpretada como uma de seis datas, dependendo da configuração DATEFORMAT. Um ano de quatro partes é interpretado como o ano.
Em ordem alfabéticaDescription
Apr[il] [15][,] 1996

Apr[il] 15[,] [19]96

Apr[il] 1996 [15]

[15] Apr[il][,] 1996

15 Apr[il][,][19]96

15 [19]96 apr[il]

[15] 1996 apr[il]

1996 APR[IL] [15]

1996 [15] APR[IL]
Você pode especificar dados de data com um mês especificado como o nome de mês cheio. Por exemplo, abril ou a abreviação Apr especificadas na linguagem atual; vírgulas são opcionais e não há diferenciação entre letras maiúsculas e minúsculas.

Aqui estão algumas diretrizes para o uso de formatos de data alfabéticos:

1) coloque os dados de data e hora entre aspas simples ('). Para idiomas diferentes de inglês, use N'

2) caracteres entre colchetes são opcionais.

3) se você especificar apenas os dois últimos dígitos do ano, os valores menores que os dois últimos dígitos do valor da configurar o ano de dois dígitos corte opção de configuração de servidor opção de configuração estão no mesmo século que o ano de corte. Valores maiores que ou iguais ao valor dessa opção estarão no século que vem antes do ano de corte. Por exemplo, se corte de ano de dois dígitos for 2050 (padrão), 25 será interpretado como 2025 e 50 será interpretado como 1950. Para evitar ambiguidade, use anos de quatro dígitos.

4) se o dia estiver ausente, o primeiro dia do mês é fornecido.

 

A configuração de sessão SET DATEFORMAT não é aplicada quando você especifica o mês de forma alfabética.
ISO 8601Description
AAAA-MM-DDThh:mm:ss[.mmm]

AAAAMMDD[ hh:mm:ss[.mmm]]
Exemplos:

1) 2004-05-23T14:25:10

2) 2004-05-23T14:25:10.487

 

Para usar o formato ISO 8601, você deve especificar cada elemento no formato. Isso também inclui o T, os dois-pontos (:) e o ponto (.) que são mostrados no formato.

Os parênteses indicam que o componente de fração de segundo é opcional. O componente de hora é especificado no formato de 24 horas.

O T indica o início da parte de hora do datetime valor.

A vantagem de usar o formato ISO 8601 é que ele é um padrão internacional com especificação não ambígua. Além disso, esse formato não é afetado por SET DATEFORMAT ou SET LANGUAGE configuração.
Não separadoDescription
AAAAMMDDThh:mm:ss[.mmm]
ODBCDescription
{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }

{ t '13:33:41' }
A API ODBC define sequências de escape para representar valores de data e hora que o ODBC chama de dados de carimbo de data/hora. Esse formato de carimbo de hora ODBC também é compatível com a definição de linguagem de OLE DB (DBGUID-SQL) com suporte a Microsoft provedor OLE DB para SQL Server. Os aplicativos que usam ADO, OLE DB e as APIs baseadas em ODBC podem usar esse formato de carimbo de data/hora de ODBC para representar datas e horas.

Sequências de escape de carimbo de hora ODBC estão no formato: { literal_type 'constant_value'}:

 

- literal_type Especifica o tipo da sequência de escape. Os carimbos de hora têm três literal_type especificadores:
1) d = somente data
2) t = somente hora
3) ts = carimbo de hora (hora + data)

 

-'constant_value' é o valor da sequência de escape. constant_value deve seguir esses formatos para cada literal_type.
d: aaaa-mm-dd
t: hh [. fff]
TS: aaaa-mm-dd hh [. fff]

DateTime valores são arredondados em incrementos de&000;,.003 ou.&007; segundos, conforme mostrado na tabela a seguir.

Valor especificado pelo usuárioValor armazenado pelo sistema
01/01/98 23:59:59.9991998-01-02 00:00:00.000
01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998
1998-01-01 23:59:59.997
01/01/98 23:59:59.992

01/01/98 23:59:59.993

01/01/98 23:59:59.994
1998-01-01 23:59:59.993
01/01/98 23:59:59.990

01/01/98 23:59:59.991
1998-01-01 23:59:59.990

DateTime não for ANSI ou ISO 8601 compatível.

Ao fazer a conversão em tipos de dados de data e hora, o SQL Server rejeita todos os valores que não pode reconhecer como datas ou horas. Para obter informações sobre como usar as funções CAST e CONVERT com dados de data e hora, consulte CAST e CONVERT (Transact-SQL).

Conversão de outros tipos de data e hora para o tipo de dados datetime

Esta seção descreve o que acontece quando outros tipos de dados de data e hora são convertidos para o datetime tipo de dados.

Quando a conversão for de data, o ano, mês e dia são copiados. O componente de hora é definido como 00:00:00.000. O código a seguir mostra os resultados da conversão de um valor date em um valor datetime.

DECLARE @date date = '12-21-16';  
DECLARE @datetime datetime = @date;  
  
SELECT @datetime AS '@datetime', @date AS '@date';  
  
--Result  
--@datetime               @date  
------------------------- ----------  
--2016-12-21 00:00:00.000 2016-12-21  

Quando a conversão for de time (n), o componente de hora é copiado e o componente de data é definido como '&1900;-01-01'. Quando a precisão fracionária de time (n) valor é maior do que três dígitos, o valor será truncado para se ajustar. O exemplo a seguir mostra os resultados da conversão de um valor time(4) em um valor datetime.

DECLARE @time time(4) = '12:10:05.1237';  
DECLARE @datetime datetime = @time;  
  
SELECT @datetime AS '@datetime', @time AS '@time';  
  
--Result  
--@datetime               @time  
------------------------- -------------  
--1900-01-01 12:10:05.123 12:10:05.1237  

Quando a conversão for de smalldatetime, as horas e os minutos são copiados. Os segundos e as frações de segundo são definidos como 0. O código a seguir mostra os resultados da conversão de um valor smalldatetime em um valor datetime.

DECLARE @smalldatetime smalldatetime = '12-01-16 12:32';  
DECLARE @datetime datetime = @smalldatetime;  
  
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@datetime               @smalldatetime  
------------------------- -----------------------  
--2016-12-01 12:32:00.000 2016-12-01 12:32:00  

Quando a conversão for de DateTimeOffset (n), os componentes de data e hora são copiados. O fuso horário é truncado. Quando a precisão fracionária de DateTimeOffset (n) valor é maior do que três dígitos, o valor será truncado. O exemplo a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor datetime.

DECLARE @datetimeoffset datetimeoffset(4) = '1968-10-23 12:45:37.1234 +10:0';  
DECLARE @datetime datetime = @datetimeoffset;  
  
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';  
  
--Result  
--@datetime               @datetimeoffset  
------------------------- ------------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +01:0   

Quando a conversão for de datetime2, a data e hora são copiados. Quando a precisão fracionária de datetime2 valor é maior do que três dígitos, o valor será truncado. O exemplo a seguir mostra os resultados da conversão de um valor datetime2(4) em um valor datetime.

DECLARE @datetime2 datetime2(4) = '1968-10-23 12:45:37.1237';  
DECLARE @datetime datetime = @datetime2;  
  
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';  
  
--Result  
--@datetime               @datetime2  
------------------------- ------------------------  
--1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237  

O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres para cada data e tempo tipo de dados.

SELECT   
     CAST('2007-05-08 12:35:29. 1234567 +12:15' AS time(7)) AS 'time'   
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS date) AS 'date'   
    ,CAST('2007-05-08 12:35:29.123' AS smalldatetime) AS   
        'smalldatetime'   
    ,CAST('2007-05-08 12:35:29.123' AS datetime) AS 'datetime'   
    ,CAST('2007-05-08 12:35:29. 1234567 +12:15' AS datetime2(7)) AS   
        'datetime2'  
    ,CAST('2007-05-08 12:35:29.1234567 +12:15' AS datetimeoffset(7)) AS   
        'datetimeoffset';  

Aqui está o conjunto de resultados.

Tipo de dadosSaída
tempo12:35:29. 1234567
Data2007-05-08
smalldatetime2007-05-08 12:35:00
Data e hora2007-05-08 12:35:29.123
datetime22007-05-08 12:35:29. 1234567
DateTimeOffset2007-05-08 12:35:29.1234567 +12:15

CAST e CONVERT (Transact-SQL)

Contribuições da comunidade

ADICIONAR
Mostrar: