data (Transact-SQL)
Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics PDW (Analytics Platform System) Ponto de extremidade de análise do SQL Warehouse no Microsoft Fabric
Define uma data no SQL Server. O tipo de dados date foi introduzido no SQL Server 2008 (10.0.x).
Descrição de date
Propriedade | Valor |
---|---|
Sintaxe | DATE |
Uso | DECLARE @MyDate DATE CREATE TABLE Table1 (Column1 DATE) |
Formato literal de cadeia de caracteres padrão (usado para cliente de nível inferior) |
yyyy-MM-dd Para saber mais, confira a seção Compatibilidade com versões anteriores para clientes de nível inferior. |
Intervalo | 0001-01-01 a 9999-12-31 (1582-10-15 a 9999-12-31 para o 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) |
Intervalos de elementos | yyyy são quatro dígitos de 0001 a 9999 que representam um ano. O Informatica limita yyyy ao intervalo de 1582 a 9999 .MM são dois dígitos de 01 a 12 que representam um mês do ano especificado.dd são dois dígitos de 01 a 31 , dependendo do mês, que representam um dia do mês especificado. |
Comprimento de caracteres | 10 posições |
Precisão, escala | 10, 0 |
Tamanho de armazenamento | 3 bytes, fixo. |
Estrutura de armazenamento | um número inteiro de 3 bytes armazena a data |
Precisão | Um dia |
Valor padrão | 1900-01-01 Esse valor é usado para a parte de data acrescentada para conversão implícita de time em datetime2 ou datetimeoffset. |
Calendário | Gregoriano |
Precisão de segundo fracionário definida pelo usuário | Não |
Preservação e reconhecimento de deslocamento de fuso horário | Não |
Reconhecimento de horário de verão | Não |
Formatos de literais de cadeia de caracteres compatíveis com date
As listas a seguir mostram os formatos de literal de cadeia de caracteres válidos para o tipo de dados de data .
[m]m
, dd
e [yy]yy
representam o mês, o dia e o ano em uma cadeia de caracteres com barras (/
), hifens (-
) ou pontos (.
) como separadores.
Somente há suporte para anos de dois ou quatro dígitos. Use quatro dígitos para o ano sempre que possível. Para especificar um inteiro de para 9999
que represente o ano de corte para interpretar anos de dois dígitos como anos de quatro dígitos, use a opção de configuração do servidor de 0001
corte de ano de dois dígitos.
Para a Informatica, yyyy
é limitado ao intervalo 1582
de 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. 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. 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
.
A configuração do idioma atual determina o formato de data padrão. Você pode alterar o formato da data usando as instruções SET LANGUAGE e SET DATEFORMAT.
O formato ydm
não é compatível para data.
Formatos literais de cadeia de caracteres para mês-dia-ano
SET DATEFORMAT mdy;
[m]m/dd/[yy]yy
[m]m-dd-[yy]yy
Formatos literais de cadeia de caracteres para mês-ano-dia
SET DATEFORMAT myd;
[m]m/[yy]yy/dd
[m]m-[yy]yy-dd
[m]m.[yy]yy.dd
Formatos literais de cadeia de caracteres para dia-mês-ano
SET DATEFORMAT dmy;
dd/[m]m/[yy]yy
dd-[m]m-[yy]yy
dd.[m]m.[yy]yy
Formatos literais de cadeia de caracteres para dia-ano-mês
SET DATEFORMAT dym;
dd/[yy]yy/[m]m
dd-[yy]yy-[m]m
dd.[yy]yy.[m]m
Formatos literais de cadeia de caracteres para ano-mês-dia
SET DATEFORMAT ymd;
[yy]yy/[m]m/dd
[yy]yy-[m]m-dd
[yy]yy-[m]m-dd
Lista alfabética de formatos
[dd] mon[,] yyyy
dd mon[,][yy]yy
dd [yy]yy mon
[dd] yyyy mon
mon [dd][,] yyyy
mon dd[,] [yy]
mon yyyy [dd]
yyyy mon [dd]
yyyy [dd] mon
mon
representa o nome completo do mês ou a abreviação do mês fornecida no idioma atual. As vírgulas são opcionais e não há diferenciação entre letras maiúsculas e minúsculas.
Para evitar ambiguidade, use anos de quatro dígitos.
Se o dia estiver ausente, o primeiro dia do mês será fornecido.
Lista de formatos ISO 8601
yyyy-MM-dd
yyyyMMdd
Igual ao padrão SQL. Este é o único formato definido como padrão internacional.
Lista não separada de formatos
[yy]yyMMdd
yyyy[MMdd]
Os dados de date podem ser especificados com quatro, seis ou oito dígitos. Uma cadeia de caracteres de seis ou oito dígitos é sempre interpretada como ymd
. O mês e o dia sempre devem ser de dois dígitos. Uma cadeia de caracteres de quatro dígitos é interpretada como um ano.
Formato de data ODBC
{ d 'yyyy-MM-dd' }
Específico à API ODBC.
Formato de data XML do W3C
yyyy-MM-ddTZD
Suporte para o uso do XML/SOAP.
TZD
é o designador de fuso horário (Z
ou +hh:mm
ou -hh:mm
):
hh:mm
representa o deslocamento de fuso horário.hh
equivale a dois dígitos, variando de0
a14
, que representam o número de horas no deslocamento de fuso horário.mm
são dois dígitos, variando de0
a59
, que representam o número de minutos adicionais no deslocamento de fuso horário.+
(mais) ou-
(menos) é o sinal obrigatório do deslocamento de fuso horário. 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. O intervalo válido de deslocamento de fuso horário vai de-14:00
a+14:00
.
Conformidade com o ANSI e ISO 8601
date está em conformidade com a definição padrão ANSI SQL do calendário Gregoriano:
Os tipos de dados datetime permitem que as datas no formato gregoriano sejam armazenadas no intervalo de datas de 0001-01-01 CE a 9999-12-31 EC.
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 yyyy-MM-dd
. Esse formato é o mesmo da definição ISO 8601 para 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).
Compatibilidade com versões anteriores de clientes de nível inferior
Alguns clientes de nível inferior não são compatíveis com os tipos de dados time, date, datetime2 e datetimeoffset. A tabela a seguir mostra o mapeamento de tipos entre uma instância de nível superior do SQL Server e clientes de nível inferior.
Tipos de dados do SQL Server | Formato de literal de cadeia de caracteres padrão passado ao cliente de nível inferior | ODBC de nível inferior | OLEDB de nível inferior | JDBC de nível inferior | SQLCLIENT de nível inferior |
---|---|---|---|---|---|
time | hh:mm:ss[.nnnnnnn] |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
date | yyyy-MM-dd |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
datetime2 | yyyy-MM-dd HH:mm:ss[.nnnnnnn] |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
datetimeoffset | yyyy-MM-dd HH:mm:ss[.nnnnnnn] [+ or -]hh:mm |
SQL_WVARCHAR ou SQL_VARCHAR |
DBTYPE_WSTR ou DBTYPE_STR |
Java.sql.String |
String ou SqString |
Converter dados de data e hora
Quando você converte informações em tipos de dados de data e hora, o SQL Server rejeita todos os valores não reconhecidos como datas nem horas. Para obter informações sobre como usar as CAST
funções and CONVERT
com dados de data e hora, consulte CAST e CONVERT.
Converter date em outros tipos de data e hora
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.
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.
Se a conversão é feita em datetime, o componente de data será copiado. O código a seguir mostra os resultados da conversão de um valor date em um valor datetime.
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Veja a seguir o conjunto de resultados.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
Quando a conversão é feita em uma smalldatetime, o valor de date está no intervalo de uma smalldatetime, o componente de data é copiado e o componente de hora é definido como 00:00:00.000
. Quando o valor date está fora do intervalo de um valor smalldatetime, a mensagem de erro 242 é exibida e o valor smalldatetime é definido como NULL
:
A conversão de um tipo de dados de data em um tipo de dados de data e hora pequenas resultou em um valor fora do intervalo.
O código a seguir mostra os resultados da conversão de um valor date em um valor smalldatetime.
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Veja a seguir o conjunto de resultados.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
Para a conversão em datetimeoffset(n), a data é copiada e a hora é definida como 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).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetimeoffset AS DATETIMEOFFSET (3) = @date;
SELECT @date AS '@date',
@datetimeoffset AS '@datetimeoffset';
Veja a seguir o conjunto de resultados.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
Quando a conversão é feita em datetime2(n), o componente de data é copiado e o componente de hora é definido como 00:00.000000
. O código a seguir mostra os resultados da conversão de um valor date em um valor datetime2(3).
DECLARE @date AS DATE = '1912-10-25';
DECLARE @datetime2 AS DATETIME2 (3) = @date;
SELECT @date AS '@date',
@datetime2 AS '@datetime2(3)';
Veja a seguir o conjunto de resultados.
@date @datetime2(3)
---------- -----------------------
1912-10-25 1912-10-25 00:00:00.000
Converter literais de cadeia de caracteres em data
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. Caso contrário, será gerado um erro de runtime. 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. A tabela a seguir mostra as regras de conversão de uma literal de cadeia de caracteres no tipo de dados date.
Literal de cadeia de caracteres de entrada | date |
---|---|
ODBC DATE | Os literais de cadeia de caracteres do ODBC são mapeados para o tipo de dados datetime. 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. |
ODBC TIME | Consulte a regra de ODBC DATE anterior. |
ODBC DATETIME | Consulte a regra de ODBC DATE anterior. |
Apenas DATE | Trivial |
Apenas TIME | Os valores padrão são fornecidos. |
Apenas TIMEZONE | Os valores padrão são fornecidos. |
DATE + TIME | A parte DATE da cadeia de caracteres de entrada é usada. |
DATE + TIMEZONE | Não permitido. |
TIME + TIMEZONE | Os valores padrão são fornecidos. |
DATE + TIME + TIMEZONE | A parte DATE de DATETIME local é usada. |
Exemplos
O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres em cada tipo de dados date e time.
SELECT CAST ('2022-05-08 12:35:29.1234567 +12:15' AS TIME (7)) AS 'time',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST ('2022-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST ('2022-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIME2 (7)) AS 'datetime2',
CAST ('2022-05-08 12:35:29.1234567 +12:15' AS DATETIMEOFFSET (7)) AS 'datetimeoffset';
Veja a seguir o conjunto de resultados.
Tipo de dados | Saída |
---|---|
time | 12:35:29.1234567 |
date | 2022-05-08 |
smalldatetime | 2022-05-08 12:35:00 |
datetime | 2022-05-08 12:35:29.123 |
datetime2 | 2022-05-08 12:35:29.1234567 |
datetimeoffset | 2022-05-08 12:35:29.1234567 +12:15 |