data (Transact-SQL)

Define uma data.

Descrição de data

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)

AAAA-MM-DD            

Para obter mais informações, consulte a seção Compatibilidade com versões anteriores a seguir.

Intervalo

0001-01-01 a 9999-12-31

1 de janeiro de 1 d.C. a 31 de dezembro de 9999 d.C.

Intervalos de elementos

AAAA são quatro dígitos de 0001 a 9999 que representam um ano.

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 representa 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 1, 3 bytes armazena a data.

Precisão

Um dia

Valor padrão

1900-01-01

Este valor é usado para a parte anexada de data utilizada 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 com suporte de data

A tabela a seguir mostra os formatos de literais de cadeia de caracteres válidos para o tipo de dados date.

Numérico

Descrição

mda                         

[m]m/dd/[aa]aa       

[m]m-dd-[aa]aa       

[m]m.dd.[aa]aa       

mad                         

mm/[aa]aa/dd       

mm-[aa]aa/dd       

[m]m.[aa]aa.dd       

dma                         

dd/[m]m/[aa]aa       

dd-[m]m-[aa]aa       

dd.[m]m.[aa]aa       

dam                         

dd/[aa]aa/[m]m       

dd-[aa]aa-[m]m       

dd.[aa]aa.[m]m       

amd                         

[aa]aa/[m]m/dd       

[aa]aa-[m]m-dd       

[aa]aa-[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.

Somente anos de dois ou quatro dígitos possuem suporte. Use quatro dígitos para o ano sempre que possível. Para especificar um número inteiro de 0001 até 9999 que representa o ano de corte para interpretar anos com dois dígitos e com quatro dígitos, use o Configurar a opção two digit year cutoff de configuração de servidor.

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 que é maior ou igual aos ú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.

Os formato padrão de data é determinado pelas configurações atuais de idioma. Você pode alterar o formato da data usando as instruções SET LANGUAGE e SET DATEFORMAT.

O formato ydm não tem suporte para date.

Alfabético

Descrição

mês [dd][,] aaaa      

mês dd[,] [aa]aa      

mês aaaa [dd]          

[dd] mês[,] aaaa          

dd mês[,][aa]aa       

dd [aa]aa mês         

[dd] aaaa mês         

aaaa mês [dd]         

aaaa [dd] mês         

mon representa o nome completo do mês ou a abreviação do mês segundo o 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.

ISO 8601

Descrição

AAAA-MM-DD            

AAAAMMDD               

Igual ao padrão SQL. Este é o único formato que é definido como padrão internacional.

Não separado

Descrição

[aa]aammdd            

aaaa[mm][dd]          

Os dados de data 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.

ODBC

Descrição

{ d 'aaaa-mm-dd' }   

Específico à API ODBC.

Funções em SQL Server 2012 como em SQL Server 2005.

Formato W3C XML

Descrição

aaaa-mm-ddTZD      

Suporte específico para utilização com XML/SOAP.

TZD é o designador de fuso horário (Z ou + hh: mm ou -hh:mm):

  • hh:mm representa o deslocamento do fuso horário. hh são dois dígitos, variando de 0 a 14, que representam o número de horas no deslocamento de fuso horário.

  • 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.

  • + (mais) ou - (menos) é o sinal obrigatório do deslocamento de fuso horário. Ele indica que o deslocamento de fuso horário é adicionado ou subtraído do UTC (Tempo Universal Coordenado) para se obter a hora local. O intervalo válido de deslocamento de fuso horário vai de -14: 00 a +14: 00.

Conformidade com ANSI e ISO 8601

date está em conformidade com a definição padrão ANSI SQL do calendário gregoriano: "NOTA 85 - os tipos de dados de hora e data permitirão que as datas no formato gregoriano sejam armazenadas no intervalo de 0001–01–01 CE até 9999–12–31 CE.

O formato padrão de literais de cadeia de caracteres que é usado para clientes de nível inferior,é compatível com o formato padrão SQL que é definido como AAAA-MM-DD. Este formato é o mesmo da definição ISO 8601 para DATE.

Compatibilidade com versões anteriores de clientes de nível inferior

Alguns clientes de nível inferior não dão suporte aos 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 2012

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

Cadeia de caracteres ou SqString

date

AAAA-MM-DD            

SQL_WVARCHAR ou SQL_VARCHAR

DBTYPE_WSTR ou DBTYPE_STR

Java.sql.String

Cadeia de caracteres ou SqString

datetime2

AAAA-MM-DD hh:mm:ss[. nnnnnnn]

SQL_WVARCHAR ou SQL_VARCHAR

DBTYPE_WSTR ou DBTYPE_STR

Java.sql.String

Cadeia de caracteres ou SqString

datetimeoffset

AAAA-MM-DD hh:mm:ss[. nnnnnnn] [+|-]hh:mm

SQL_WVARCHAR ou SQL_VARCHAR

DBTYPE_WSTR ou DBTYPE_STR

Java.sql.String

Cadeia de caracteres ou SqString

Convertendo dados date e time

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 data e hora data, consulte CAST e CONVERT (Transact-SQL).

Convertendo data em outros tipos de data e hora

A tabela a seguir descreve o que ocorre quando um tipo de dados date é convertido em outros tipos de dados de data e hora.

Tipo de dados para converter em

Detalhes da conversão

time(n)

A conversão falha e a mensagem de erro 206 é gerada: "Conflito no tipo de operando: data é incompatível com a hora".

datetime

A data é copiada e 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-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)

smalldatetime

Quando o valor date está no intervalo de uma smalldatetime, o componente de data é copiado e o componente de hora é definido como 00:00:00. 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 date a um tipo de dados smalldatetime resulta em um valor fora do intervalo; e o valor smalldatetime é definido como NULL.

O código a seguir mostra os resultados da conversão de um valor date em um valor smalldatetime.

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)

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 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)

datetime2(n)

O componente de data é copiado, e o componente de hora é definido como 00:00:00.00 independente do valor de (n).

O código a seguir mostra os resultados da conversão de um valor date em um valor datetime2(3).

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.00
--
--(1 row(s) affected)

Convertendo cadeias literais em data

Serão permitidas conversões de literais de cadeia de caracteres para tipos de data e hora se todas as partes da cadeia de caracteres estiverem em formatos válidos. Caso contrário, será gerado um erro de tempo de execução. As conversões implícitas ou explícitas que não especificam um estilo, 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 de ODBC são mapeados para o tipo de dados datetime. Qualquer operação de atribuição de literais de ODBC DATETIME em um tipo date provocará uma conversão implícita entre datetime e esse tipo conforme 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 será usada.

Exemplos

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

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 dados

Saída

time

12:35:29. 1234567

date

2007-05-08

smalldatetime

2007-05-08 12:35:00

datetime

2007-05-08 12:35:29.123

datetime2

2007-05-08 12:35:29. 1234567

datetimeoffset

2007-05-08 12:35:29.1234567 +12:15

Consulte também

Referência

CAST e CONVERT (Transact-SQL)