datetime (Transact-SQL)datetime (Transact-SQL)

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure simAzure Synapse Analytics (SQL DW) simParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database yesAzure Synapse Analytics (SQL DW) yesParallel 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.Defines a date that is combined with a time of day with fractional seconds that is based on a 24-hour clock.

Observação

Use os tipos de dados time, date, datetime2 e datetimeoffset para o novo trabalho.Use the time, date, datetime2 and datetimeoffset data types for new work. Esses tipos estão de acordo com o SQL padrão.These types align with the SQL Standard. Eles são mais portáteis.They are more portable. time, datetime2 e datetimeoffset fornecem mais precisão de segundos.time, datetime2 and datetimeoffset provide more seconds precision. datetimeoffset é compatível com fuso horário para aplicativos implantados globalmente.datetimeoffset provides time zone support for globally deployed applications.

Descrição de datetimedatetime Description

PropriedadeProperty ValorValue
SintaxeSyntax datetimedatetime
UsoUsage DECLARE @MyDatetime datetimeDECLARE @MyDatetime datetime

CREATE TABLE Table1 ( Column1 datetime )CREATE TABLE Table1 ( Column1 datetime )
Formatos de literais de cadeia de caracteres padrãoDefault string literal formats

(usado para cliente de nível inferior)(used for down-level client)
Não aplicávelNot applicable
Intervalo de datasDate range Janeiro 1, 1753, a dezembro 31, 9999January 1, 1753, through December 31, 9999
Intervalo de horasTime range 00:00:00 a 23:59:59.99700:00:00 through 23:59:59.997
Intervalo de deslocamento de fuso horárioTime zone offset range NenhumNone
Intervalos de elementosElement ranges AAAA são quatro dígitos de 1753 a 9999 que representam um ano.YYYY is four digits from 1753 through 9999 that represent a year.

MM são dois dígitos, variando de 01 a 12, que representam um mês do ano especificado.MM is two digits, ranging from 01 to 12, that represent a month in the specified year.

DD são dois dígitos, variando de 01 a 31, dependendo do mês, que representam um dia do mês especificado.DD is two digits, ranging from 01 to 31 depending on the month, that represent a day of the specified month.

hh são dois dígitos, variando de 00 a 23, que representam a hora.hh is two digits, ranging from 00 to 23, that represent the hour.

mm são dois dígitos, variando de 00 a 59, que representam o minuto.mm is two digits, ranging from 00 to 59, that represent the minute.

ss são dois dígitos, variando de 00 a 59, que representam o segundo.ss is two digits, ranging from 00 to 59, that represent the second.

n* vai de zero a três dígitos, variando de 0 a 999, representando as frações de segundo.n* is zero to three digits, ranging from 0 to 999, that represent the fractional seconds.
Comprimento de caracteresCharacter length 19 posições no mínimo e 23 no máximo19 positions minimum to 23 maximum
Tamanho de armazenamentoStorage size 8 bytes8 bytes
PrecisãoAccuracy Os valores são arredondados em incrementos de .000, .003 ou .007 segundos.Rounded to increments of .000, .003, or .007 seconds
Valor padrãoDefault value 1900-01-01 00:00:001900-01-01 00:00:00
CalendárioCalendar Gregoriano (inclui o intervalo completo de anos.)Gregorian (Does include the complete range of years.)
Precisão de segundo fracionário definida pelo usuárioUser-defined fractional second precision NãoNo
Preservação e reconhecimento de deslocamento de fuso horárioTime zone offset aware and preservation NãoNo
Reconhecimento de horário de verãoDaylight saving aware NãoNo

Formatos de literais de cadeia de caracteres com suporte para datetimeSupported String Literal Formats for datetime

As tabelas a seguir listam os formatos de literais de cadeia de caracteres com suporte para datetime.The following tables list the supported string literal formats for datetime. Exceto para ODBC, os literais de cadeia de caracteres datetime estão entre aspas simples ('), por exemplo, 'string_literaL'.Except for ODBC, datetime string literals are in single quotation marks ('), for example, 'string_literaL'. Se o ambiente não for us_english, os literais de cadeia de caracteres deverão estar no formato N'string_literaL'.If the environment isn't us_english, the string literals should be in the format N'string_literaL'.

NuméricoNumeric DESCRIÇÃODescription
Formatos de data:Date formats:

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

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

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

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

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

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

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

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

Formatos de hora:Time formats:

14:3014:30

14:30[:20:999]14:30[:20:999]

14:30[:20.9]14:30[:20.9]

4am4am

4 PM4 PM
Você pode especificar dados de data com um mês numérico especificado.You can specify date data with a numeric month specified. Por exemplo, 5/20/97 representa o vigésimo dia de maio de 1997.For example, 5/20/97 represents the twentieth day of May 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.When you use numeric date format, specify the month, day, and year in a string that uses slash marks (/), hyphens (-), or periods (.) as separators. Essa cadeia de caracteres deve ser exibida da seguinte forma:This string must appear in the following form:

número separador número separador número [time] [time]number separator number separator number [time] [time]



Quando o idioma é definido como us_english, a ordem padrão da data é mdy.When the language is set to us_english, the default order for the date is mdy. Você pode alterar a ordem da data usando a instrução SET DATEFORMAT.You can change the date order by using the SET DATEFORMAT statement.

A configuração de SET DATEFORMAT determina como são interpretados os valores de data.The setting for SET DATEFORMAT determines how date values are interpreted. Se a ordem não corresponder à configuração, os valores não serão interpretados como datas.If the order doesn't match the setting, the values aren't interpreted as dates. Datas fora de ordem poderão ser interpretadas incorretamente como fora do intervalo ou com valores incorretos.Out-of-order dates may be misinterpreted as out of range or with wrong values. Por exemplo, 12/10/08 pode ser interpretada como uma de seis datas, dependendo da configuração DATEFORMAT.For example, 12/10/08 can be interpreted as one of six dates, depending on the DATEFORMAT setting. Um ano de quatro partes é interpretado como o ano.A four-part year is interpreted as the year.
Em ordem alfabéticaAlphabetical DESCRIÇÃODescription
Apr[il] [15][,] 1996Apr[il] [15][,] 1996

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

Apr[il] 1996 [15]Apr[il] 1996 [15]

[15] Apr[il][,] 1996[15] Apr[il][,] 1996

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

15 [19]96 apr[il]15 [19]96 apr[il]

[15] 1996 apr[il][15] 1996 apr[il]

1996 APR[IL] [15]1996 APR[IL] [15]

1996 [15] APR[IL]1996 [15] APR[IL]
Você pode especificar dados de data com um mês especificado como o nome de mês cheio.You can specify date data with a month specified as the full month name. 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.For example, April or the month abbreviation of Apr specified in the current language; commas are optional and capitalization is ignored.

Aqui estão algumas diretrizes para o uso de formatos de data alfabéticos:Here are some guidelines for using alphabetical date formats:

1) Insira os dados de data e hora com aspas simples (').1) Enclose the date and time data in single quotation marks ('). Para idiomas diferentes de inglês, use N'For languages other than English, use N'

2) Os caracteres entre colchetes são opcionais.2) Characters that are enclosed in brackets are optional.

3) Se você especificar apenas os dois últimos dígitos do ano, os valores menores que os dois últimos dígitos do valor da opção de configuração Configurar a opção two digit year cutoff de configuração de servidor estarão no mesmo século do ano de corte.3) If you specify only the last two digits of the year, values less than the last two digits of the value of the Configure the two digit year cutoff Server Configuration Option configuration option are in the same century as the cutoff year. Os valores maiores ou iguais ao valor dessa opção estão no século anterior ao ano de corte.Values greater than or equal to the value of this option are in the century that comes before the cutoff year. Por exemplo, se two digit year cutoff for 2050 (padrão), 25 será interpretado como 2025 e 50 será interpretado como 1950.For example, if two digit year cutoff is 2050 (default), 25 is interpreted as 2025 and 50 is interpreted as 1950. Para evitar ambiguidade, use anos de quatro dígitos.To avoid ambiguity, use four-digit years.

4) Se o dia estiver ausente, o primeiro dia do mês será fornecido.4) If the day is missing, the first day of the month is supplied.



A configuração de sessão SET DATEFORMAT não é aplicada quando você especifica o mês em formato alfabético.The SET DATEFORMAT session setting isn't applied when you specify the month in alphabetical form.
ISO 8601ISO 8601 DESCRIÇÃODescription
AAAA-MM-DDThh:mm:ss[.mmm]YYYY-MM-DDThh:mm:ss[.mmm]

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

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

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



Para usar o formato ISO 8601, você precisa especificar cada elemento no formato, incluindo o T, os dois-pontos (:) e o ponto final (.) que são mostrados no formato.To use the ISO 8601 format, you must specify each element in the format, including the T, the colons (:), and the period (.) that are shown in the format.

Os parênteses indicam que o componente de fração de segundo é opcional.The brackets indicate that the fraction of second component is optional. O componente de hora é especificado no formato de 24 horas.The time component is specified in the 24-hour format.

O T indica o início da parte de hora do valor de datetime.The T indicates the start of the time part of the datetime value.

A vantagem de usar o formato ISO 8601 é que ele é um padrão internacional com especificação não ambígua.The advantage in using the ISO 8601 format is that it is an international standard with unambiguous specification. Além disso, esse formato não é afetado pela configuração SET DATEFORMAT ou SET LANGUAGE.Also, this format isn't affected by the SET DATEFORMAT or SET LANGUAGE setting.
Não separadoUnseparated DESCRIÇÃODescription
AAAAMMDDThh:mm:ss[.mmm]YYYYMMDD hh:mm:ss[.mmm]
ODBCODBCODBC DESCRIÇÃODescription
{ ts '1998-05-02 01:23:56.123' }{ ts '1998-05-02 01:23:56.123' }

{ d '1990-10-02' }{ d '1990-10-02' }

{ t '13:33:41' }{ 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.The ODBC API defines escape sequences to represent date and time values, which ODBC calls timestamp data. Também há suporte para esse formato de carimbo de data/hora do ODBC na definição de idioma OLE DB (DBGUID-SQL) compatível com o provedor OLE DB do MicrosoftMicrosoft para SQL ServerSQL Server.This ODBC timestamp format is also supported by the OLE DB language definition (DBGUID-SQL) supported by the MicrosoftMicrosoft OLE DB provider for SQL ServerSQL 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.Applications that use the ADO, OLE DB, and ODBC-based APIs can use this ODBC timestamp format to represent dates and times.

As sequências de escape do carimbo de data/hora do ODBC estão no formato: { literal_type 'constant_value' }:ODBC timestamp escape sequences are of the format: { literal_type 'constant_value' }:



- literal_type especifica o tipo da sequência de escape.- literal_type specifies the type of the escape sequence. Os carimbos de data/hora têm três especificadores de literal_type:Timestamps have three literal_type specifiers:
1) d = somente data1) d = date only
2) t = somente hora2) t = time only
3) ts = carimbo de data/hora (hora + data)3) ts = timestamp (time + date)



- 'constant_value' é o valor da sequência de escape.- 'constant_value' is the value of the escape sequence. constant_value deve seguir esses formatos para cada literal_type.constant_value must follow these formats for each literal_type.
d: yyyy-mm-ddd : yyyy-mm-dd
t: hh:mm:ss[.fff]t : hh:mm:ss[.fff]
ts: yyyy-mm-dd hh:mm:ss[.fff]ts : yyyy-mm-dd hh:mm:ss[.fff]

Arredondando a precisão de segundo fracionário de datetimeRounding of datetime Fractional Second Precision

Os valores de datetime são arredondados em incrementos de .000, .003 ou .007 segundos, como mostrado na tabela a seguir.datetime values are rounded to increments of .000, .003, or .007 seconds, as shown in the following table.

Valor especificado pelo usuárioUser-specified value Valor armazenado pelo sistemaSystem stored value
01/01/98 23:59:59.99901/01/98 23:59:59.999 1998-01-02 00:00:00.0001998-01-02 00:00:00.000
01/01/98 23:59:59.99501/01/98 23:59:59.995

01/01/98 23:59:59.99601/01/98 23:59:59.996

01/01/98 23:59:59.99701/01/98 23:59:59.997

01/01/98 23:59:59.99801/01/98 23:59:59.998
1998-01-01 23:59:59.9971998-01-01 23:59:59.997
01/01/98 23:59:59.99201/01/98 23:59:59.992

01/01/98 23:59:59.99301/01/98 23:59:59.993

01/01/98 23:59:59.99401/01/98 23:59:59.994
1998-01-01 23:59:59.9931998-01-01 23:59:59.993
01/01/98 23:59:59.99001/01/98 23:59:59.990

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

Conformidade com ANSI e ISO 8601ANSI and ISO 8601 Compliance

datetime não está em conformidade com o ANSI nem com o ISO 8601.datetime isn't ANSI or ISO 8601 compliant.

Convertendo dados de data e horaConverting Date and Time Data

Ao fazer a conversão em tipos de dados de data e hora, SQL ServerSQL Server rejeita todos os valores que não pode reconhecer como datas ou horas.When you convert to date and time data types, SQL ServerSQL Server rejects all values it can't recognize as dates or times. Para obter informações sobre como usar as funções CAST e CONVERT com os dados de data e hora, consulte CAST e CONVERT (Transact-SQL).For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL).

Convertendo outros tipos de data e hora no tipo de dados datetimeConverting Other Date and Time Types to the datetime Data Type

Esta seção descreve o que acontece quando outros tipos de dados de data e hora são convertidos no tipo de dados datetime.This section describes what occurs when other date and time data types are converted to the datetime data type.

Quando a conversão é de date, o ano, mês e dia são copiados.When the conversion is from date, the year, month, and day are copied. O componente de hora é definido como 00:00:00.000.The time component is set to 00:00:00.000. O código a seguir mostra os resultados da conversão de um valor date em um valor datetime.The following code shows the results of converting a date value to a datetime value.

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 é de time(n) , o componente de hora é copiado e o componente de data é definido como '1900-01-01'.When the conversion is from time(n), the time component is copied, and the date component is set to '1900-01-01'. Quando a precisão fracionária do valor de time(n) for maior que três dígitos, o valor será truncado para ser ajustado.When the fractional precision of the time(n) value is greater than three digits, the value will be truncated to fit. O exemplo a seguir mostra os resultados da conversão de um valor time(4) em um valor datetime.The following example shows the results of converting a time(4) value to a datetime value.

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 é de smalldatetime, as horas e os minutos são copiados.When the conversion is from smalldatetime, the hours and minutes are copied. Os segundos e as frações de segundo são definidos como 0.The seconds and fractional seconds are set to 0. O código a seguir mostra os resultados da conversão de um valor smalldatetime em um valor datetime.The following code shows the results of converting a smalldatetime value to a datetime value.

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 é de datetimeoffset(n) , os componentes de data e hora são copiados.When the conversion is from datetimeoffset(n), the date and time components are copied. O fuso horário é truncado.The time zone is truncated. Quando a precisão fracionária do valor de datetimeoffset(n) for maior que três dígitos, o valor será truncado.When the fractional precision of the datetimeoffset(n) value is greater than three digits, the value will be truncated. O exemplo a seguir mostra os resultados da conversão de um valor datetimeoffset(4) em um valor datetime.The following example shows the results of converting a datetimeoffset(4) value to a datetime value.

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 é de datetime2(n) , a data e hora são copiadas.When the conversion is from datetime2(n), the date and time are copied. Quando a precisão fracionária do valor de datetime2(n) for maior que três dígitos, o valor será truncado.When the fractional precision of the datetime2(n) value is greater than three digits, the value will be truncated. O exemplo a seguir mostra os resultados da conversão de um valor datetime2(4) em um valor datetime.The following example shows the results of converting a datetime2(4) value to a datetime value.

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  

ExemplosExamples

O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres em cada tipo de dados date e time.The following example compares the results of casting a string to each date and time data type.

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';  

Este é o conjunto de resultados.Here is the result set.

Tipo de dadosData type SaídaOutput
timetime 12:35:29.12:35:29. 12345671234567
datedate 2007-05-082007-05-08
smalldatetimesmalldatetime 2007-05-08 12:35:002007-05-08 12:35:00
datetimedatetime 2007-05-08 12:35:29.1232007-05-08 12:35:29.123
datetime2datetime2 2007-05-08 12:35:29.2007-05-08 12:35:29. 12345671234567
datetimeoffsetdatetimeoffset 2007-05-08 12:35:29.1234567 +12:152007-05-08 12:35:29.1234567 +12:15

Confira tambémSee also

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