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 que é combinada com uma hora do dia baseada no relógio de 24 horas. datetime2 pode ser considerado como uma extensão do tipo datetime existente que tem um intervalo de datas maior, uma precisão fracionada padrão maior e precisão opcional especificada pelo usuário.
Descrição datetime2
| Property | Value |
|---|---|
| Syntax | datetime2 [ (precisão de segundos fracionários) ] |
| Usage | DECLARE @MyDatetime2 datetime2(7);CREATE TABLE Table1 (Column1 datetime2(7)); |
| Formato literal de cadeia de caracteres padrão (usado para cliente de nível inferior) |
yyyy-MM-dd HH:mm:ss[.nnnnnnn]Para obter mais informações, consulte Compatibilidade com versões anteriores para clientes de nível inferior mais adiante neste artigo. |
| Intervalo de datas |
0001-01-01 através 9999-12-311 de janeiro de 1 d.C. a 31 de dezembro de 9999 d.C. |
| Intervalo de tempo |
00:00:00 através 23:59:59.9999999 |
| Intervalo de deslocamento de fuso horário | None |
| Intervalos de elementos |
yyyy é um número de quatro dígitos, que varia de 0001 até 9999, que representa um ano.MM é um número de dois dígitos, variando de 01 a 12, que representa um mês no ano especificado.dd é um número de dois dígitos, variando de 01 a 31 dependendo do mês, que representa um dia do mês especificado.HH é um número de dois dígitos, variando de 00 a 23, que representa a hora.mm é um número de dois dígitos, variando de 00 a 59, que representa o minuto.ss é um número de dois dígitos, variando de 00 a 59, que representa o segundo.n* é um número de zero a sete dígitos de 0 até 9999999, que representa os segundos fracionários. Na Informatica, os segundos fracionários são truncados quando n é menor que 3. |
| Comprimento da personagem | 19 posições mínimo (yyyy-MM-dd HH:mm:ss) a 27 máximo (yyyy-MM-dd HH:mm:ss.0000000) |
| Precisão, escala | 0 a 7 dígitos, com uma precisão de 100 nanossegundos (100 ns). A precisão padrão é de 7 dígitos. No Microsoft Fabric Data Warehouse, essa precisão pode ser um número inteiro de 0 a 6, sem padrão. A precisão deve ser especificada no Microsoft Fabric Data Warehouse. |
| Tamanho de armazenamento 1 | 6 bytes para precisão inferior a 3. 7 bytes para precisão 3 ou 4. Todas as outras precisões requerem 8 bytes. 2 |
| Accuracy | 100 nanossegundos |
| Valor predefinido | 1900-01-01 00:00:00 |
| Calendar | Gregorian |
| Precisão de segundo fracionária definida pelo usuário | Yes |
| Reconhecimento e preservação de deslocamento de fuso horário | No |
| Aviso de horário de verão | No |
1 Os valores fornecidos são para armazenamento de linha não compactado. O uso de compactação de dados ou columnstore pode alterar o tamanho do armazenamento para cada precisão. Além disso, o tamanho do armazenamento no disco e na memória pode diferir. Por exemplo, os valores datetime2 sempre exigem 8 bytes na memória quando o modo de lote é usado.
2 Quando um valor datetime2 é convertido para um valor varbinary , um byte extra é adicionado ao valor varbinary para armazenar precisão.
Para metadados de tipo de dados, consulte sys.systypes ou TYPEPROPERTY. A precisão e a escala são variáveis para alguns tipos de dados de data e hora. Para obter a precisão e a escala de uma coluna, consulte COLUMNPROPERTY, COL_LENGTH ou sys.columns.
Formatos literais de cadeia de caracteres suportados para datetime2
As tabelas a seguir listam os formatos literais de cadeia de caracteres ISO 8601 e ODBC suportados para datetime2. Para obter informações sobre formatos alfabéticos, numéricos, não separados e de hora para as partes de data e hora de datetime2, consulte data e hora.
| Certificação ISO 8601 | Descriptions |
|---|---|
yyyy-MM-ddTHH:mm:ss[.nnnnnnn] |
Esse formato não é afetado pelas configurações de localidade e SET LANGUAGESET DATEFORMAT sessão. O T, os dois pontos (:) e o ponto (.) são incluídos na cadeia de caracteres literal, por exemplo 2024-05-02T19:58:47.1234567. |
| ODBC | Description |
|---|---|
{ ts 'yyyy-MM-dd HH:mm:ss[.nnnnnnn]' } |
Específico da API ODBC: O número de dígitos à direita da vírgula decimal, que representa os segundos fracionários, pode ser especificado de 0 a 7 (100 nanossegundos). |
Conformidade com ANSI e ISO 8601
A conformidade de data e hora com ANSI e ISO 8601 aplica-se a datetime2.
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_WSTRor DBTYPE_STR | Java.sql.String | String ou SqString |
| date | yyyy-MM-dd | SQL_WVARCHAR ou SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String ou SqString |
| datetime2 | aaaa-MM-dd HH:mm:ss[.nnnnnnn] | SQL_WVARCHAR ou SQL_VARCHAR | DBTYPE_WSTRor DBTYPE_STR | Java.sql.String | String ou SqString |
| datetimeoffset | aaaa-MM-dd HH:mm:ss[.nnnnnnn] [+|-]hh:mm | SQL_WVARCHAR ou SQL_VARCHAR | DBTYPE_WSTRor 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 Mecanismo de Banco de Dados 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 dados de data e hora, consulte CAST e CONVERT
Converter outros tipos de data e hora para o tipo de dados datetime2
Esta seção descreve o que ocorre quando outros tipos de dados de data e hora são convertidos para o tipo de dados datetime2 .
Quando a conversão é de data, o ano, mês e dia são copiados. O componente de tempo é definido como 00:00:00.0000000. O código a seguir mostra os resultados da conversão de um valor date em um valor datetime2.
DECLARE @date AS DATE = '12-21-16';
DECLARE @datetime2 AS DATETIME2 = @date;
SELECT @datetime2 AS '@datetime2',
@date AS '@date';
Aqui está o conjunto de resultados.
@datetime2 @date
--------------------------- ----------
2016-12-21 00:00:00.0000000 2016-12-21
Quando a conversão é de time(n), o componente de tempo é copiado e o componente de data é definido como 1900-01-01. O exemplo a seguir mostra os resultados da conversão de um valor time(7) em um valor datetime2 .
DECLARE @time AS TIME (7) = '12:10:16.1234567';
DECLARE @datetime2 AS DATETIME2 = @time;
SELECT @datetime2 AS '@datetime2',
@time AS '@time';
Aqui está o conjunto de resultados.
@datetime2 @time
--------------------------- ----------------
1900-01-01 12:10:16.1234567 12:10:16.1234567
Quando a conversão é de smalldatetime, as horas e minutos são copiados. Os segundos e segundos fracionários são definidos como 0. O código a seguir mostra os resultados da conversão de um valor smalldatetime em um valor datetime2.
DECLARE @smalldatetime AS SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime2 AS DATETIME2 = @smalldatetime;
SELECT @datetime2 AS '@datetime2',
@smalldatetime AS '@smalldatetime';
Aqui está o conjunto de resultados.
@datetime2 @smalldatetime
--------------------------- -----------------------
2016-12-01 12:32:00.0000000 2016-12-01 12:32:00
Quando a conversão é de datetimeoffset(n), os componentes de data e hora são copiados. O fuso horário está truncado. O exemplo a seguir mostra os resultados da conversão de um valor datetimeoffset(7) em um valor datetime2.
DECLARE @datetimeoffset AS DATETIMEOFFSET (7) = '2016-10-23 12:45:37.1234567 +10:0';
DECLARE @datetime2 AS DATETIME2 = @datetimeoffset;
SELECT @datetime2 AS '@datetime2',
@datetimeoffset AS '@datetimeoffset';
Aqui está o conjunto de resultados.
@datetime2 @datetimeoffset
--------------------------- ----------------------------------
2016-10-23 12:45:37.1234567 2016-10-23 12:45:37.1234567 +10:00
Quando a conversão é de datetime, a data e a hora são copiadas. A precisão fracionada é estendida para 7 dígitos. O exemplo a seguir mostra os resultados da conversão de um valor datetime em um valor datetime2.
DECLARE @datetime AS DATETIME = '2016-10-23 12:45:37.333';
DECLARE @datetime2 AS DATETIME2 = @datetime;
SELECT @datetime2 AS '@datetime2',
@datetime AS '@datetime';
Aqui está o conjunto de resultados.
@datetime2 @datetime
----------------------- ---------------------------
2016-10-23 12:45:37.3333333 2016-10-23 12:45:37.333
Transmitir explicitamente para datetime2 ao usar datetime
No nível de compatibilidade de banco de dados 130 e superior, as conversões implícitas dos tipos de dados datetime para datetime2 mostram maior precisão ao contabilizar os milissegundos fracionários, resultando em diferentes valores convertidos, como visto no exemplo anterior. Use a conversão explícita para o tipo de dados datetime2 sempre que existir um cenário de comparação misto entre os tipos de dados datetime e datetime2 . Para obter mais informações, consulte aprimoramentos do SQL Server e do Banco de Dados SQL do Azure no tratamento de alguns tipos de dados e operações incomuns.
Converter literais de cadeia de caracteres em datetime2
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, desde tipos de data e hora até 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 datetime2 .
| Literal da cadeia de caracteres de entrada | datetime2(n) |
|---|---|
ODBC DATE |
Os literais de cadeia de caracteres ODBC são mapeados para o tipo de dados datetime . Qualquer operação de atribuição de ODBC DATETIME literais em tipos datetime2 causa uma conversão implícita entre datetime e esse tipo, conforme definido pelas regras de conversão. |
ODBC TIME |
Ver regra anterior ODBC DATE . |
ODBC DATETIME |
Ver regra anterior ODBC DATE . |
DATE apenas |
O TIME padrão da peça é 00:00:00. |
TIME apenas |
O DATE padrão da peça é 1900-01-01. |
TIMEZONE apenas |
Os valores padrão são fornecidos. |
DATE + TIME |
Trivial. |
DATE + TIMEZONE |
Não permitido. |
TIME + TIMEZONE |
O DATE padrão da peça é 1900-1-1.
TIMEZONE a entrada é ignorada. |
DATE + TIME + TIMEZONE |
O local DATETIME é usado. |
Examples
O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres a cada de data e hora tipo de dados.
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 | Output |
|---|---|
| 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 |