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

ESTE TÓPICO APLICA-SE A: simSQL Server (a partir de 2008)simBanco de Dados SQL do Microsoft AzuresimAzure SQL Data Warehouse simParallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse 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 o tempo, data, datetime2 e datetimeoffset tipos de dados 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. tempo, datetime2 e datetimeoffset fornecem mais precisão em segundos.time, datetime2 and datetimeoffset provide more seconds precision. DateTimeOffset fornece suporte de 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 DECLARAR @MyDatetime datetimeDECLARE @MyDatetime datetime

Criar tabela 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 às 23:59:59.99700:00:00 through 23:59:59.997
Intervalo de deslocamento de fuso horárioTime zone offset range NenhumaNone
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 (não inclui o intervalo completo de anos.)Gregorian (Does not 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 literal de cadeia de caracteres com suporte para datetime.The following tables list the supported string literal formats for datetime. Exceto para ODBC, datetime literais de cadeia de caracteres 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 devem estar no formato 'string_literaL'.If the environment is not us_english, the string literals should be in the format N'string_literaL'.

NuméricoNumeric DescriptionDescription
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 é MDA.When the language is set to us_english, the default order for the date is mdy. Você pode alterar a ordem da data usando o SET DATEFORMAT instrução.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, porque eles estarão fora do intervalo ou serão mal-interpretados.If the order does not match the setting, the values are not interpreted as dates, because they are out of range or the values are misinterpreted. 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 DescriptionDescription
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) coloque os dados de data e hora entre 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) caracteres que são colocados 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 configurar o ano de dois dígitos cutoff Server Configuration Option opção de configuração estão no mesmo século que o 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. Valores maiores que ou iguais ao valor dessa opção estarão no século que vem antes do 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 corte de ano de dois dígitos 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 é 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 de forma alfabética.The SET DATEFORMAT session setting is not applied when you specify the month in alphabetical form.
ISO 8601ISO 8601 DescriptionDescription
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ê deve especificar cada elemento no formato.To use the ISO 8601 format, you must specify each element in the format. Isso também inclui o T, os dois-pontos (:) e o ponto (.) que são mostradas no formato.This also includes 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 de datetime valor.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 por SET DATEFORMAT ou SET LANGUAGE configuração.Also, this format is not affected by the SET DATEFORMAT or SET LANGUAGE setting.
Não separadoUnseparated DescriptionDescription
AAAAMMDDThh:mm:ss[.mmm]YYYYMMDD hh:mm:ss[.mmm]
ODBCODBC DescriptionDescription
{ 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 hora ODBC pela definição de idioma OLE DB (DBGUID-SQL) com suporte a MicrosoftMicrosoft provedor OLE DB 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.

Sequências de escape de carimbo de hora 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 hora têm três literal_type especificadores de:Timestamps have three literal_type specifiers:
1) d = somente data1) d = date only
2) t = somente hora2) t = time only
3) ts = carimbo de 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: aaaa-mm-ddd : yyyy-mm-dd
t: hh [. fff]t : hh:mm:ss[.fff]
TS: aaaa-mm-dd hh [. fff]ts : yyyy-mm-dd hh:mm:ss[.fff]

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

DateTime os valores são arredondados em incrementos de.000,.003 ou. 007 segundos, conforme 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 for ANSI ou ISO 8601 compatível.datetime is not ANSI or ISO 8601 compliant.

Convertendo dados Date e Time Converting Date and Time Data

Ao fazer a conversão em tipos de dados de data e hora, o 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 cannot recognize as dates or times. 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 ) .For information about using the CAST and CONVERT functions with date and time data, see CAST and CONVERT (Transact-SQL).

Conversão de outros tipos de data e hora para o 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 para o datetime tipo de dados.This section describes what occurs when other date and time data types are converted to the datetime data type.

Quando a conversão for de data, 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 for 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 de time (n) valor é maior do que três dígitos, o valor será truncado para caber.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 for de smalldatetime, as horas e 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 for 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 de DateTimeOffset (n) valor é maior do 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 for de datetime2, a data e hora são copiados.When the conversion is from datetime2(n), the date and time are copied. Quando a precisão fracionária de datetime2 valor é maior do 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 para cada data e tempo tipo de dados.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';  

Aqui está 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

Consulte tambémSee also

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