data (Transact-SQL)date (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 no SQL ServerSQL Server.Defines a date in SQL ServerSQL Server.

Descrição de datedate description

PropriedadeProperty ValorValue
SintaxeSyntax datedate
UsoUsage DECLARE @MyDate dateDECLARE @MyDate date

CREATE TABLE Table1 ( Column1 date )CREATE TABLE Table1 ( Column1 date )
Formato literal de cadeia de caracteres padrãoDefault string literal format

(usado para cliente de nível inferior)(used for down-level client)
AAAA-MM-DDYYYY-MM-DD

Para obter mais informações, consulte a seção Compatibilidade com versões anteriores a seguir.For more information, see the "Backward Compatibility for Down-level Clients" section that follows.
IntervaloRange 0001-01-01 a 9999-12-31 (1582-10-15 a 9999-12-31 para o Informatica)0001-01-01 through 9999-12-31 (1582-10-15 through 9999-12-31 for Informatica)

1º de janeiro de 1 EC (Era Comum) até 31 de dezembro de 9999 EC (15 de outubro de 1582 EC a 31 de dezembro de 9999 EC para Informática)January 1, 1 CE (Common Era) through December 31, 9999 CE (October 15, 1582 CE through December 31, 9999 CE for Informatica)
Intervalos de elementosElement ranges AAAA são quatro dígitos de 0001 a 9999 que representam um ano.YYYY is four digits from 0001 to 9999 that represent a year. Para o Informatica, YYYY está limitado ao intervalo de 1582 a 9999.For Informatica, YYYY is limited to the range 1582 to 9999.

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

DD são dois dígitos de 01 a 31, dependendo do mês, que representam um dia do mês especificado.DD is two digits from 01 to 31, depending on the month, that represents a day of the specified month.
Comprimento de caracteresCharacter length 10 posições10 positions
Precisão, escalaPrecision, scale 10, 010, 0
Tamanho de armazenamentoStorage size 3 bytes, fixo.3 bytes, fixed
Estrutura de armazenamentoStorage structure Um número inteiro de 1, 3 bytes armazena a data.1, 3-byte integer stores date.
PrecisãoAccuracy Um diaOne day
Valor padrãoDefault value 1900-01-011900-01-01

Esse valor é usado para a parte de data acrescentada para conversão implícita de time em datetime2 ou datetimeoffset.This value is used for the appended date part for implicit conversion from time to datetime2 or datetimeoffset.
CalendárioCalendar GregorianoGregorian
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 compatíveis com dateSupported string literal formats for date

A tabela a seguir mostra os formatos de literais de cadeia de caracteres válidos para o tipo de dados date.The following tables show the valid string literal formats for the date data type.

NuméricoNumeric DescriçãoDescription
mdamdy

[m]m/dd/[aa]aa[m]m/dd/[yy]yy

[m]m-dd-[aa]aa[m]m-dd-[yy]yy

[m]m.dd.[aa]aa[m]m.dd.[yy]yy

madmyd

mm/[aa]aa/ddmm/[yy]yy/dd

mm-[aa]aa/ddmm-[yy]yy/dd

[m]m.[aa]aa.dd[m]m.[yy]yy.dd

dmadmy

dd/[m]m/[aa]aadd/[m]m/[yy]yy

dd-[m]m-[aa]aadd-[m]m-[yy]yy

dd.[m]m.[aa]aadd.[m]m.[yy]yy

damdym

dd/[aa]aa/[m]mdd/[yy]yy/[m]m

dd-[aa]aa-[m]mdd-[yy]yy-[m]m

dd.[aa]aa.[m]mdd.[yy]yy.[m]m

amdymd

[aa]aa/[m]m/dd[yy]yy/[m]m/dd

[aa]aa-[m]m-dd[yy]yy-[m]m-dd

[aa]aa-[m]m-dd[yy]yy-[m]m-dd
[m]m, dd e [aa]aa representam o mês, o dia e o ano de uma cadeia de caracteres com barras (/), hífens (-) ou pontos (.) como separadores.[m]m, dd, and [yy]yy represent month, day, and year in a string with slash marks (/), hyphens (-), or periods (.) as separators.

Somente anos de dois ou quatro dígitos possuem suporte.Only four- or two-digit years are supported. Use quatro dígitos para o ano sempre que possível.Use four-digit years whenever possible. Para especificar um inteiro de 0001 até 9999 que representa o ano de corte para interpretar anos com dois dígitos como de quatro dígitos, use Configurar a opção two digit year cutoff de configuração do servidor.To specify an integer from 0001 to 9999 that represents the cutoff year for interpreting two-digit years as four-digit years, use the Configure the two digit year cutoff Server Configuration Option.

Observação!Note! Para o Informatica, YYYY está limitado ao intervalo de 1582 a 9999.For Informatica, YYYY is limited to the range 1582 to 9999.

Um ano de dois dígitos que é menor ou igual aos últimos dois dígitos do ano de corte está no mesmo século do ano de corte.A two-digit year that is less than or equal to the last two digits of the cutoff year is in the same century as the cutoff year. Um ano de dois dígitos maior que os últimos dois dígitos do ano de corte está no mesmo século que vem antes do ano de corte.A two-digit year greater than the last two digits of the cutoff year is in the century that comes before the cutoff year. Por exemplo, se o ano de corte de dois dígitos for 2049 padrão, o ano de dois dígitos 49 será interpretado como 2049 e o ano de dois dígitos 50 será interpretado como 1950.For example, if the two-digit year cutoff is the default 2049, the two-digit year 49 is interpreted as 2049 and the two-digit year 50 is interpreted as 1950.

Os formato padrão de data é determinado pelas configurações atuais de idioma.The default date format is determined by the current language setting. Você pode alterar o formato da data usando as instruções SET LANGUAGE e SET DATEFORMAT.You can change the date format by using the SET LANGUAGE and SET DATEFORMAT statements.

O formato adm não é compatível com a data.The ydm format isn't supported for date.
Em ordem alfabéticaAlphabetical DescriçãoDescription
mês [dd][,] aaaamon [dd][,] yyyy

mês dd[,] [aamon dd[,] [yy

mês aaaa [dd]mon yyyy [dd]

[dd] mês[,] aaaa[dd] mon[,] yyyy

dd mês[,][aa]aadd mon[,][yy]yy

dd [aa]aa mêsdd [yy]yy mon

[dd] aaaa mês[dd] yyyy mon

aaaa mês [dd]yyyy mon [dd]

aaaa [dd] mêsyyyy [dd] mon
mon representa o nome completo do mês ou a abreviação do mês fornecida no idioma atual.mon represents the full month name or the month abbreviation given in the current language. As vírgulas são opcionais e não há diferenciação entre letras maiúsculas e minúsculas.Commas are optional and capitalization is ignored.

Para evitar ambiguidade, use anos de quatro dígitos.To avoid ambiguity, use four-digit years.

Se o dia estiver ausente, o primeiro dia do mês será fornecido.If the day is missing, the first day of the month is supplied.
ISO 8601ISO 8601 DescriçãoDescription
AAAA-MM-DDYYYY-MM-DD

AAAAMMDDYYYYMMDD
Igual ao padrão SQL.Same as the SQL standard. Este é o único formato definido como padrão internacional.This format is the only format defined as an international standard.
Não separadoUnseparated DescriçãoDescription
[aa]aammdd[yy]yymmdd

aaaa[mm][dd]yyyy[mm][dd]
Os dados de date podem ser especificados com quatro, seis ou oito dígitos.The date data can be specified with four, six, or eight digits. Uma cadeia de caracteres de seis ou oito dígitos é sempre interpretada como ymd.A six- or eight-digit string is always interpreted as ymd. O mês e o dia sempre devem ser de dois dígitos.The month and day must always be two digits. Uma cadeia de caracteres de quatro dígitos é interpretada como um ano.A four-digit string is interpreted as year.
ODBCODBCODBC DescriçãoDescription
{ d 'aaaa-mm-dd' }{ d 'yyyy-mm-dd' } Específico à API ODBC.ODBC API specific.
Formato W3C XMLW3C XML format DescriçãoDescription
aaaa-mm-ddTZDyyyy-mm-ddTZD Suporte para o uso do XML/SOAP.Supported for XML/SOAP usage.

TZD é o designador de fuso horário (Z ou + hh: mm ou -hh:mm):TZD is the time zone designator (Z or +hh:mm or -hh:mm):

- hh:mm representa o deslocamento de fuso horário.- hh:mm represents the time zone offset. hh são dois dígitos, variando de 0 a 14, que representam o número de horas no deslocamento de fuso horário.hh is two digits, ranging from 0 to 14, that represent the number of hours in the time zone offset.
- MM são dois dígitos, variando de 0 a 59, que representam o número de minutos adicionais no deslocamento de fuso horário.- MM is two digits, ranging from 0 to 59, that represent the number of additional minutes in the time zone offset.
– + (mais) ou - (menos) é o sinal obrigatório do deslocamento de fuso horário.- + (plus) or - (minus) the mandatory sign of the time zone offset. Esse sinal indica que, para o sistema obter o horário local, o deslocamento de fuso horário é adicionado ao horário UTC (Tempo Universal Coordenado) ou subtraído dele.This sign indicates that, to obtain the local time, the time zone offset is added or subtracted from the Coordinated Universal Times (UTC) time. O intervalo válido de deslocamento de fuso horário vai de -14: 00 a +14: 00.The valid range of time zone offset is from -14:00 to +14:00.

Conformidade com o ANSI e ISO 8601ANSI and ISO 8601 compliance

date está em conformidade com a definição padrão ANSI SQL do calendário Gregoriano: "NOTA 85 – Tipos de dados date e time aceitarão que datas no formato Gregoriano sejam armazenadas no intervalo de dados 0001-01-01 CE até 9999-12-31 CE".date complies with the ANSI SQL standard definition for the Gregorian calendar: "NOTE 85 - Datetime data types will allow dates in the Gregorian format to be stored in the date range 0001-01-01 CE through 9999-12-31 CE."

O formato padrão de literais de cadeia de caracteres, que é usado para clientes de nível inferior, está em conformidade com o formato padrão SQL definido como AAAA-MM-DD.The default string literal format, which is used for down-level clients, complies with the SQL standard form that is defined as YYYY-MM-DD. Este formato é o mesmo da definição ISO 8601 para DATE.This format is the same as the ISO 8601 definition for DATE.

Observação

Para o Informatica, o intervalo é limitado a 1582-10-15 (15 de outubro de 1582 CE) a 9999-12-31 (31 de dezembro de 9999 CE).For Informatica, the range is limited to 1582-10-15 (October 15, 1582 CE) to 9999-12-31 (December 31, 9999 CE).

Compatibilidade com versões anteriores de clientes de nível inferiorBackward compatibility for down-level clients

Alguns clientes de nível inferior não são compatíveis com os tipos de dados time, date, datetime2 e datetimeoffset.Some down-level clients don't support the time, date, datetime2, and datetimeoffset data types. A tabela a seguir mostra o mapeamento de tipos entre uma instância de nível superior do SQL ServerSQL Server e clientes de nível inferior.The following table shows the type mapping between an up-level instance of SQL ServerSQL Server and down-level clients.

Tipos de dados do SQL ServerSQL ServerSQL ServerSQL Server data type Formato de literal de cadeia de caracteres padrão passado ao cliente de nível inferiorDefault string literal format passed to down-level client ODBC de nível inferiorDown-level ODBC OLEDB de nível inferiorDown-level OLEDB JDBC de nível inferiorDown-level JDBC SQLCLIENT de nível inferiorDown-level SQLCLIENT
timetime hh:mm:ss[.nnnnnnn]hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadeia de caracteres ou SqStringString or SqString
datedate AAAA-MM-DDYYYY-MM-DD SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadeia de caracteres ou SqStringString or SqString
datetime2datetime2 AAAA-MM-DD hh:mm:ss[.nnnnnnn]YYYY-MM-DD hh:mm:ss[.nnnnnnn] SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadeia de caracteres ou SqStringString or SqString
datetimeoffsetdatetimeoffset YYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mmYYYY-MM-DD hh:mm:ss[.nnnnnnn] [+|-]hh:mm SQL_WVARCHAR ou SQL_VARCHARSQL_WVARCHAR or SQL_VARCHAR DBTYPE_WSTR ou DBTYPE_STRDBTYPE_WSTRor DBTYPE_STR Java.sql.StringJava.sql.String Cadeia de caracteres ou SqStringString or SqString

Convertendo dados de data e horaConverting date and time data

Quando você converte informações em tipos de dados de data e hora, o SQL ServerSQL Server rejeita todos os valores não reconhecidos como datas nem horas.When you convert to date and time data types, SQL ServerSQL Server rejects all values it doesn'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 date em outros tipos de data e horaConverting date to other date and time types

A tabela a seguir descreve o que ocorre quando você converte um tipo de dados date em outros tipos de dados de data e hora.This section describes what occurs when you convert a date data type to other date and time data types.

Quando a conversão é para time(n) , a conversão falha e mensagem de erro 206 é gerada: "Conflito no tipo de operando: a data é incompatível com a hora".When the conversion is to time(n), the conversion fails, and error message 206 is raised: "Operand type clash: date is incompatible with time".

Se a conversão é feita em datetime, a data é copiada.If the conversion is to datetime, date is copied. 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-10-25';  
DECLARE @datetime datetime= @date;  
  
SELECT @date AS '@date', @datetime AS '@datetime';  
  
--Result  
--@date      @datetime  
------------ -----------------------  
--2025-12-10 2025-12-10 00:00:00.000  
--  
--(1 row(s) affected)  

Quando a conversão é feita em uma smalldatetime, o valor de dateestá no intervalo de uma smalldatetime, o componente de data é copiado e o componente de hora é definido como 00:00:00.000.When the conversion is to smalldatetime, the date value is in the range of a smalldatetime, the date component is copied, and the time component is set to 00:00:00.000. Quando o valor date está fora do intervalo de um valor smalldatetime, a mensagem de erro 242 é gerada: "A conversão de um tipo de dados de data para tipos de dados smalldatetime resulta em um valor fora do intervalo"; e o valor smalldatetime é definido como NULL.When the date value is outside the range of a smalldatetime value, error message 242 is raised: "The conversion of a date data type to a smalldatetime data types resulted in an out-of-range value."; and the smalldatetime value is set to NULL. O código a seguir mostra os resultados da conversão de um valor date em um valor smalldatetime.The following code shows the results of converting a date value to a smalldatetime value.

DECLARE @date date= '1912-10-25';  
DECLARE @smalldatetime smalldatetime = @date;  
  
SELECT @date AS '@date', @smalldatetime AS '@smalldatetime';  
  
--Result  
--@date      @smalldatetime  
------------ -----------------------  
--1912-10-25 1912-10-25 00:00:00  
--  
--(1 row(s) affected)  

Para a conversão em datetimeoffset(n) , a data é copiada e a hora é definida como 00:00.0000000 +00:00.For conversion to datetimeoffset(n), date is copied, and the time is set to 00:00.0000000 +00:00. O código a seguir mostra os resultados da conversão de um valor date em um valor datetimeoffset(3).The following code shows the results of converting a date value to a datetimeoffset(3) value.

DECLARE @date date = '1912-10-25';  
DECLARE @datetimeoffset datetimeoffset(3) = @date;  
  
SELECT @date AS '@date', @datetimeoffset AS '@datetimeoffset';  
  
--Result  
--@date      @datetimeoffset  
------------ ------------------------------  
--1912-10-25 1912-10-25 00:00:00.000 +00:00  
--  
--(1 row(s) affected)  

Quando a conversão é feita em datetime2(n) , o componente de data é copiado e o componente de hora é definido como 00:00.000000.When the conversion is to datetime2(n), the date component is copied, and the time component is set to 00:00.000000. O código a seguir mostra os resultados da conversão de um valor date em um valor datetime2(3).The following code shows the results of converting a date value to a datetime2(3) value.

DECLARE @date date = '1912-10-25'  
DECLARE @datetime2 datetime2(3) = @date;  
  
SELECT @date AS '@date', @datetime2 AS '@datetime2(3)';  
  
--Result  
--@date      @datetime2(3)  
------------ -----------------------  
--1912-10-25 1912-10-25 00:00:00.000  
--  
--(1 row(s) affected)  

Convertendo literais de cadeias de caracteres em dataConverting string literals to date

Se todas as partes das cadeias de caracteres estiverem em formatos válidos, as conversões de literais de cadeia de caracteres em tipos de data e hora serão permitidas.Conversions from string literals to date and time types are allowed if all parts of the strings are in valid formats. Caso contrário, será gerado um erro de runtime.Otherwise, a runtime error is raised. As conversões implícitas ou explícitas que não especificam um estilo, mas são de tipos de data e hora em literais de cadeia de caracteres, estarão no formato padrão da sessão atual.Implicit conversions or explicit conversions that don't specify a style, from date and time types to string literals will be in the default format of the current session. A tabela a seguir mostra as regras de conversão de uma literal de cadeia de caracteres no tipo de dados date.The following table shows the rules for converting a string literal to the date data type.

Literal de cadeia de caracteres de entradaInput string literal datedate
ODBC DATEODBC DATE Os literais de cadeia de caracteres do ODBC são mapeados para o tipo de dados datetime.ODBC string literals are mapped to the datetime data type. Toda operação de atribuição de literais de ODBC DATETIME em um tipo date causa uma conversão implícita entre datetime e o tipo definido pelas regras de conversão.Any assignment operation from ODBC DATETIME literals into a date type causes an implicit conversion between datetime and the type that the conversion rules define.
ODBC TIMEODBC TIME Consulte a regra de ODBC DATE anterior.See previous ODBC DATE rule.
ODBC DATETIMEODBC DATETIME Consulte a regra de ODBC DATE anterior.See previous ODBC DATE rule.
Apenas DATEDATE only TrivialTrivial
Apenas TIMETIME only Os valores padrão são fornecidos.Default values are supplied.
Apenas TIMEZONETIMEZONE only Os valores padrão são fornecidos.Default values are supplied.
DATE + TIMEDATE + TIME A parte DATE da cadeia de caracteres de entrada é usada.The DATE part of the input string is used.
DATE + TIMEZONEDATE + TIMEZONE Não permitido.Not allowed.
TIME + TIMEZONETIME + TIMEZONE Os valores padrão são fornecidos.Default values are supplied.
DATE + TIME + TIMEZONEDATE + TIME + TIMEZONE A parte DATE de DATETIME local será usada.The DATE part of local DATETIME will be used.

ExemplosExamples

O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres para cada tipo de dados de data e hora.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)