Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Define uma data no SQL Server. O tipo de dados de data foi introduzido no SQL Server 2008 (10.0.x).
Descrição da data
| Property | Value |
|---|---|
| Syntax | DATE |
| Usage | DECLARE @MyDate DATECREATE TABLE Table1 (Column1 DATE) |
| Formato literal de cadeia de caracteres padrão (usado para cliente de nível inferior) |
yyyy-MM-ddPara obter mais informações, consulte a seção Compatibilidade com versões anteriores para clientes de nível inferior . |
| Range |
0001-01-01 através de 9999-12-31 (1582-10-15 através da 9999-12-31 Informatica)1 de janeiro de 1 d.C. (Era Comum) a 31 de dezembro de 9999 d.C. (15 de outubro de 1582 d.C. a 31 de dezembro de 9999 d.C. para Informática) |
| Intervalos de elementos |
yyyysão quatro dígitos a 0001 partir do 9999 que representam um ano. A Informatica limita yyyy o intervalo 1582 a 9999.MM são dois dígitos de 01 para 12 que representam um mês no ano especificado.dd é de dois dígitos de 01 para 31, dependendo do mês, que representa um dia do mês especificado. |
| Comprimento da personagem | 10 posições |
| Precisão, escala | 10, 0 |
| Tamanho de armazenamento | 3 bytes, fixos |
| Estrutura de armazenamento | Um inteiro de 3 bytes armazena a data |
| Accuracy | Um dia |
| Valor predefinido | 1900-01-01Esse valor é usado para a parte de data anexada para conversão implícita de hora para datetime2 ou datetimeoffset. |
| Calendar | Gregorian |
| Precisão de segundo fracionária definida pelo usuário | No |
| Reconhecimento e preservação de deslocamento de fuso horário | No |
| Aviso de horário de verão | No |
Formatos literais de cadeia de caracteres suportados para data
As listas a seguir mostram os formatos literais de cadeia de caracteres válidos para o tipo de dados de data .
[m]m, dde [yy]yy representam mês, dia e ano em uma cadeia de caracteres com barras (/), hífenes (-) ou pontos (.) como separadores.
Apenas anos de quatro dígitos ou dois dígitos são suportados. Use anos de quatro dígitos sempre que possível. Para especificar um inteiro de para que represente 0001 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 corte de ano de 9999dois dígitos.
Para a Informatica, yyyy limita-se ao intervalo 1582 de 9999.
Um ano de dois dígitos que é menor ou igual aos dois últimos dígitos do ano de corte está no mesmo século que o ano de corte. Um ano de dois dígitos maior do que os dois últimos dígitos do ano de corte é no século que antecede o ano de corte. Por exemplo, se o ponto de corte do ano de dois dígitos for o padrão 2049, o ano 49 de dois dígitos será interpretado como 2049 e o ano 50 de dois dígitos será interpretado como 1950.
A configuração de idioma atual determina o formato de data padrão. Você pode alterar o formato de data usando as instruções SET LANGUAGE e SET DATEFORMAT .
O ydm formato não é suportado para a 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]yydd-[m]m-[yy]yydd.[m]m.[yy]yy
Formatos literais de cadeia de caracteres para dia-ano-mês
SET DATEFORMAT dym;
dd/[yy]yy/[m]mdd-[yy]yy-[m]mdd.[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[,] yyyydd mon[,][yy]yydd [yy]yy mon[dd] yyyy monmon [dd][,] yyyymon dd[,] [yy]mon yyyy [dd]yyyy mon [dd]yyyy [dd] mon
mon representa o nome completo do mês, ou a abreviatura do mês, dado no idioma atual. As vírgulas são opcionais e a utilização de maiúsculas é ignorada.
Para evitar ambiguidades, use anos de quatro dígitos.
Se faltar o dia, é fornecido o primeiro dia do mês.
Lista de formatos ISO 8601
yyyy-MM-ddyyyyMMdd
O mesmo que o padrão SQL. Este formato é o único definido como um padrão internacional.
Lista separada de formatos
[yy]yyMMddyyyy[MMdd]
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 devem ser sempre de dois dígitos. Uma cadeia de quatro dígitos é interpretada como o ano.
Formato de data ODBC
{ d 'yyyy-MM-dd' }
Específico da API ODBC.
Formato de data XML W3C
yyyy-MM-ddTZD
Suportado para uso XML/SOAP.
TZDé o designador de fuso horário (Z ou +hh:mm-hh:mm ):
hh:mmrepresenta o deslocamento de fuso horário.hhsão dois dígitos, variando de0a14, que representam o número de horas no deslocamento de fuso horário.mmsão dois dígitos, variando de0a59, que representam o número de minutos adicionais no deslocamento de fuso horário.+(mais) ou-(menos) é o sinal obrigatório da compensação de fuso horário. Este sinal indica que, para obter a hora local, o deslocamento de fuso horário é adicionado ou subtraído da hora UTC (Coordinated Universal Times). O intervalo válido de deslocamento de fuso horário é de-14:00até+14:00.
Conformidade com ANSI e ISO 8601
data está em conformidade com a definição padrão ANSI SQL para o calendário gregoriano:
Os tipos de dados datetime permitem que as datas no formato gregoriano sejam armazenadas no intervalo de datas 0001-01-01 CE até 9999-12-31 CE.
O formato literal de cadeia de caracteres padrão, que é usado para clientes de nível inferior, está em conformidade com o formulário padrão SQL que é definido como yyyy-MM-dd. Este formato é o mesmo que a definição ISO 8601 para DATE.
Note
Para a Informatica, o intervalo é limitado a 1582-10-15 (15 de outubro de 1582 d.C.) a 9999-12-31 (31 de dezembro de 9999 d.C.).
Compatibilidade com versões anteriores para clientes de nível inferior
Alguns clientes de nível inferior não suportam os tipos de dados time, date, datetime2 e datetimeoffset. A tabela a seguir mostra o mapeamento de tipo entre uma instância de nível superior do SQL Server e clientes de nível inferior.
| Tipo de dados do SQL Server | Formato literal de cadeia de caracteres padrão passado para o 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 em tipos de dados de data e hora, o SQL Server rejeita todos os valores que não reconhece como datas ou horas. Para obter informações sobre como usar as funções CAST e CONVERT com dados de data e hora, consulte CAST e CONVERT.
Converter data em outros tipos de data e hora
Esta seção descreve o que ocorre quando você converte um tipo de dados de data para outros tipos de dados de data e hora.
Quando a conversão é para time(n), a conversão falha e a mensagem de erro 206 é gerada:
Conflito de tipo de operando: a data é incompatível com a hora.
Se a conversão for para datetime, o componente date será copiado. O código a seguir mostra os resultados da conversão de um valor de data em um valor datetime .
DECLARE @date AS DATE = '12-10-25';
DECLARE @datetime AS DATETIME = @date;
SELECT @date AS '@date',
@datetime AS '@datetime';
Aqui está o conjunto de resultados.
@date @datetime
---------- -----------------------
2025-12-10 2025-12-10 00:00:00.000
Quando a conversão é para smalldatetime, o valor date está no intervalo de um smalldatetime, o componente date é copiado e o componente time é definido como 00:00:00.000. Quando o valor de data está fora do intervalo de um valor smalldatetime , a mensagem de erro 242 é gerada e o valor smalldatetime é definido como NULL:
A conversão de um tipo de dados de data para um tipo de dados smalldatetime resultou em um valor fora do intervalo.
O código a seguir mostra os resultados da conversão de um valor de data em um valor smalldatetime .
DECLARE @date AS DATE = '1912-10-25';
DECLARE @smalldatetime AS SMALLDATETIME = @date;
SELECT @date AS '@date',
@smalldatetime AS '@smalldatetime';
Aqui está o conjunto de resultados.
@date @smalldatetime
---------- -------------------
1912-10-25 1912-10-25 00:00:00
Para conversão para 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 de data 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';
Aqui está o conjunto de resultados.
@date @datetimeoffset
---------- ------------------------------
1912-10-25 1912-10-25 00:00:00.000 +00:00
Quando a conversão é para 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 de data 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)';
Aqui está 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
Conversões de literais de cadeia de caracteres para tipos de data e hora são permitidas se todas as partes das cadeias de caracteres estiverem em formatos válidos. Caso contrário, um erro de tempo de execução é gerado. Conversões implícitas ou conversões explícitas que não especificam um estilo, de tipos de data e hora a literais de cadeia de caracteres, estão no formato padrão da sessão atual. A tabela a seguir mostra as regras para converter um literal de cadeia de caracteres para o tipo de dados de data .
| Literal da cadeia de caracteres de entrada | date |
|---|---|
| DATA ODBC | Os literais de cadeia de caracteres ODBC são mapeados para o tipo de dados datetime . Qualquer operação de atribuição de literais ODBC DATETIME em um tipo de data causa uma conversão implícita entre datetime e o tipo que as regras de conversão definem. |
| ODBC TIME | Consulte a regra DATE ODBC anterior. |
| ODBC DATA-HORA | Consulte a regra DATE ODBC anterior. |
| Apenas DATA | Trivial |
| SÓ TEMPO | Os valores padrão são fornecidos. |
| Apenas FUSO HORÁRIO | Os valores padrão são fornecidos. |
| DATA + HORA | A parte DATE da cadeia de caracteres de entrada é usada. |
| DATA + FUSO HORÁRIO | Não permitido. |
| HORA + FUSO HORÁRIO | Os valores padrão são fornecidos. |
| DATA + HORA + FUSO HORÁRIO | A parte DATE de DATETIME local é usada. |
Examples
O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres com cada tipo de dados de data e hora.
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';
Aqui está o conjunto de resultados.
| Tipo de dados | Output |
|---|---|
| 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 |