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:Banco de Dados SQL do
Azure
Instância Gerenciada de SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Banco de Dados SQL no Microsoft Fabric
Define uma data que é combinada com uma hora do dia com segundos fracionários que se baseia em um relógio de 24 horas.
Evite usar datetime para novos trabalhos. Em vez disso, use o hora, data, datetime2e datetimeoffset tipos de dados. Esses tipos se alinham com o SQL Standard e são mais portáteis. hora, datetime2 e datetimeoffset fornecer mais segundos de precisão. datetimeoffset fornece suporte de fuso horário para aplicativos implantados globalmente.
Description
| Property | Value |
|---|---|
| Syntax | DATETIME |
| Usage | DECLARE @MyDatetime DATETIME;CREATE TABLE Table1 (Column1 DATETIME); |
| Formatos literais de cadeia de caracteres padrão (usados para cliente de nível inferior) | Não aplicável |
| Intervalo de datas | 1753-01-01 (1 de janeiro de 1753) até 9999-12-31 (31 de dezembro de 9999) |
| Intervalo de tempo | 00:00:00 até 23:59:59.997 |
| Intervalo de deslocamento de fuso horário | None |
| Intervalos de elementos |
yyyy são quatro dígitos de 1753 a 9999 que representam um ano.MM são dois dígitos, variando de 01 a 12, que representam um mês no ano especificado.dd são dois dígitos, variando de 01 a 31 dependendo do mês, que representam um dia do mês especificado.HH são dois dígitos, variando de 00 a 23, que representam a hora.mm são dois dígitos, variando de 00 a 59, que representam o minuto.ss são dois dígitos, variando de 00 a 59, que representam o segundo.n* é de zero a três dígitos, variando de 0 a 999, que representam os segundos fracionários. |
| Comprimento do caractere | 19 posições no mínimo a 23 no máximo |
| Tamanho de armazenamento | 8 bytes |
| Accuracy | Arredondado para incrementos de .000, .003ou .007 segundos |
| Valor predefinido | 1900-01-01 00:00:00 |
| Calendar | Gregoriano (inclui a gama completa de anos) |
| de precisão de segundo fracionário definido pelo usuário | No |
| Reconhecimento de compensação de fuso horário e preservação | No |
| Horário de verão ciente | No |
Formatos literais de cadeia de caracteres suportados para datetime
As tabelas a seguir listam os formatos literais de cadeia de caracteres suportados para datetime. Exceto para ODBC, literais de cadeia de caracteres de datetime estão entre aspas simples ('), por exemplo, 'string_literaL'. Se o ambiente não estiver us_english, os literais de cadeia de caracteres devem estar no formato Unicode N'string_literaL'.
Formato numérico
Você pode especificar dados de data com um mês numérico especificado. Por exemplo, 5/20/97 representa o vigésimo dia de maio de 1997. Ao usar o formato de data numérica, especifique o mês, o dia e o ano em uma cadeia de caracteres que use marcas de barra (/), hífenes (-) ou pontos (.) como separadores. Essa cadeia de caracteres deve aparecer da seguinte forma:
<number separator number separator number [time] [time]>
Quando o idioma é definido como us_english, a ordem padrão para a data é mdy (mês, dia, ano). Você pode alterar a ordem de data usando a instrução
A configuração para SET DATEFORMAT determina como os valores de data são interpretados. Se a ordem não corresponder à configuração, os valores não serão interpretados como datas. Datas fora de ordem podem ser interpretadas incorretamente como fora do intervalo ou com valores errados. Por exemplo, 12/10/08 pode ser interpretada como uma das seis datas, dependendo da configuração DATEFORMAT. Um ano de quatro partes é interpretado como o ano.
| Formato da data | Order |
|---|---|
[0]4/15/[19]96 |
mdy |
[0]4-15-[19]96 |
mdy |
[0]4.15.[19]96 |
mdy |
[0]4/[19]96/15 |
myd |
15/[0]4/[19]96 |
dmy |
15/[19]96/[0]4 |
dym |
[19]96/15/[0]4 |
ydm |
[19]96/[0]4/15 |
ymd |
| Formato de hora |
|---|
14:30 |
14:30[:20:997] |
14:30[:20.9] |
4am |
4 PM |
Formato alfabético
Você pode especificar dados de data com um mês especificado como o nome completo do mês. Por exemplo, April, ou a abreviatura do mês de Apr, especificado no idioma atual. As vírgulas são opcionais e a utilização de maiúsculas é ignorada.
Aqui estão algumas diretrizes para usar formatos de data alfabéticos:
Coloque os dados de data e hora entre aspas simples (
'). Para outros idiomas além do inglês, useN''.Os caracteres entre parênteses são opcionais.
Se você especificar apenas os dois últimos dígitos do ano, os valores inferiores aos dois últimos dígitos do valor da opção de configuração de de corte de
dois dígitos estarão no mesmo século do ano de corte. Valores maiores ou iguais ao valor desta opção estão no século que antecede o ano de corte. Por exemplo, se de corte de ano de dois dígitos for 2050(padrão),25será interpretado como2025e50será interpretado como1950. Para evitar ambiguidades, use anos de quatro dígitos.Se faltar o dia, é fornecido o primeiro dia do mês.
A configuração de sessão
SET DATEFORMATnão é aplicada quando você especifica o mês em formato alfabético.
| Alphabetical |
|---|
Apr[il] [15][,] 1996 |
Apr[il] 15[,] [19]96 |
Apr[il] 1996 [15] |
[15] Apr[il][,] 1996 |
15 Apr[il][,][19]96 |
15 [19]96 apr[il] |
[15] 1996 apr[il] |
1996 APR[IL] [15] |
1996 [15] APR[IL] |
Formato ISO 8601
Para usar o formato ISO 8601, você deve especificar cada elemento no formato, incluindo o T, os dois pontos (:) e o ponto (.) que são mostrados no formato.
Os parênteses indicam que a fração de segundo componente é opcional. O componente de tempo é especificado no formato de 24 horas. O
A vantagem em usar o formato ISO 8601 é que é uma norma internacional com especificação inequívoca. Além disso, esse formato não é afetado pela configuração SET DATEFORMAT ou SET LANGUAGE.
Examples:
2004-05-23T14:25:102004-05-23T14:25:10.487
| Certificação ISO 8601 |
|---|
yyyy-MM-ddTHH:mm:ss[.mmm] |
yyyyMMdd[ HH:mm:ss[.mmm]] |
Formato não separado
Este formato é semelhante ao formato ISO 8601, exceto que não contém separadores de data.
| Unseparated |
|---|
yyyyMMdd HH:mm:ss[.mmm] |
Formato ODBC
A API ODBC define sequências de escape para representar valores de data e hora, que o ODBC chama de dados de carimbo de data/hora. Esse formato de carimbo de data/hora ODBC também é suportado pela definição de linguagem OLE DB (DBGUID-SQL) suportada pelo provedor Microsoft OLE DB para SQL Server. Os aplicativos que usam as APIs baseadas em ADO, OLE DB e ODBC podem usar esse formato de carimbo de data/hora ODBC para representar datas e horas.
As sequências de escape de carimbo de data/hora ODBC são do formato: { <literal_type> '<constant_value>' }:
<literal_type>especifica o tipo da sequência de escape. Os carimbos de data/hora têm três<literal_type>especificadores:-
d= apenas data -
t= apenas tempo -
ts= carimbo de data/hora (hora + data)
-
<constant_value>é o valor da sequência de escape.<constant_value>deve seguir estes formatos para cada<literal_type>:-
d:yyyy-MM-dd -
t:hh:mm:ss[.fff] -
ts:yyyy-MM-dd HH:mm:ss[.fff]
-
| ODBC |
|---|
{ ts '1998-05-02 01:23:56.123' } |
{ d '1990-10-02' } |
{ t '13:33:41' } |
Arredondamento da precisão de segundo fracionário data/hora
valores de datetime são arredondados para incrementos de .000, .003ou .007 segundos, conforme mostrado no exemplo a seguir.
SELECT '01/01/2024 23:59:59.999' AS [User-specified value],
CAST('01/01/2024 23:59:59.999' AS DATETIME) AS [System stored value]
UNION SELECT '01/01/2024 23:59:59.998', CAST('01/01/2024 23:59:59.998' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.997', CAST('01/01/2024 23:59:59.997' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.996', CAST('01/01/2024 23:59:59.996' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.995', CAST('01/01/2024 23:59:59.995' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.994', CAST('01/01/2024 23:59:59.994' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.993', CAST('01/01/2024 23:59:59.993' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.992', CAST('01/01/2024 23:59:59.992' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.991', CAST('01/01/2024 23:59:59.991' AS DATETIME)
UNION SELECT '01/01/2024 23:59:59.990', CAST('01/01/2024 23:59:59.990' AS DATETIME);
Aqui está o conjunto de resultados.
| Valor especificado pelo utilizador | Valor armazenado pelo sistema |
|---|---|
01/01/2024 23:59:59.999 |
2024-01-02 00:00:00.000 |
01/01/2024 23:59:59.99801/01/2024 23:59:59.99701/01/2024 23:59:59.99601/01/2024 23:59:59.995 |
2024-01-01 23:59:59.997 |
01/01/2024 23:59:59.99401/01/2024 23:59:59.99301/01/2024 23:59:59.992 |
2024-01-01 23:59:59.993 |
01/01/2024 23:59:59.99101/01/2024 23:59:59.990 |
2024-01-01 23:59:59.990 |
Conformidade com ANSI e ISO 8601
datetime não é compatível com ANSI ou ISO 8601.
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 datetime
Esta seção descreve o que ocorre quando outros tipos de dados de data e hora são convertidos para o datetime tipo de dados.
Quando a conversão é de data, o ano, mês e dia são copiados. O componente de tempo é 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-21-16';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Aqui está o conjunto de resultados.
@datetime @date
------------------------ -----------
2016-12-21 00:00:00.000 2016-12-21
O exemplo anterior usa um formato de data específico da região (MM-DD-YY).
DECLARE @date DATE = '12-21-16';
Você deve atualizar o exemplo para corresponder ao formato da sua região.
Você também pode completar o exemplo com o formato de data compatível com ISO 8601 (yyyy-MM-dd). Por exemplo:
DECLARE @date DATE = '2016-12-21';
DECLARE @datetime DATETIME = @date;
SELECT @datetime AS '@datetime', @date AS '@date';
Quando a conversão é de time(n), o componente de tempo é copiado e o componente de data é definido como 1900-01-01. Quando a precisão fracionária do time(n) valor é maior que três dígitos, o valor é truncado para ajustar. O exemplo a seguir mostra os resultados da conversão de um valor TIME(4) em um valor DATETIME.
DECLARE @time TIME(4) = '12:10:05.1237';
DECLARE @datetime DATETIME = @time;
SELECT @datetime AS '@datetime', @time AS '@time';
Aqui está o conjunto de resultados.
@datetime @time
------------------------ --------------
1900-01-01 12:10:05.123 12:10:05.1237
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 DATETIME.
DECLARE @smalldatetime SMALLDATETIME = '12-01-16 12:32';
DECLARE @datetime DATETIME = @smalldatetime;
SELECT @datetime AS '@datetime', @smalldatetime AS '@smalldatetime';
Aqui está o conjunto de resultados.
@datetime @smalldatetime
------------------------ --------------------
2016-12-01 12:32:00.000 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. Quando a precisão fracionada do valor de datetimeoffset(n) é maior que três dígitos, o valor é truncado. O exemplo a seguir mostra os resultados da conversão de um valor DATETIMEOFFSET(4) em um valor DATETIME.
DECLARE @datetimeoffset DATETIMEOFFSET(4) = '1968-10-23 12:45:37.1234 +10:0';
DECLARE @datetime DATETIME = @datetimeoffset;
SELECT @datetime AS '@datetime', @datetimeoffset AS '@datetimeoffset';
Aqui está o conjunto de resultados.
@datetime @datetimeoffset
------------------------ -------------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237 +10:0
Quando a conversão é de datetime2(n), a data e a hora são copiadas. Quando a precisão fracionada do valor datetime2(n) é maior que três dígitos, o valor é truncado. O exemplo a seguir mostra os resultados da conversão de um valor DATETIME2(4) em um valor DATETIME.
DECLARE @datetime2 DATETIME2(4) = '1968-10-23 12:45:37.1237';
DECLARE @datetime DATETIME = @datetime2;
SELECT @datetime AS '@datetime', @datetime2 AS '@datetime2';
Aqui está o conjunto de resultados.
@datetime @datetime2
------------------------ -------------------------
1968-10-23 12:45:37.123 1968-10-23 12:45:37.1237
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('2024-05-08 12:35:29.1234567 +12:15' AS TIME(7)) AS 'time',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATE) AS 'date',
CAST('2024-05-08 12:35:29.123' AS SMALLDATETIME) AS 'smalldatetime',
CAST('2024-05-08 12:35:29.123' AS DATETIME) AS 'datetime',
CAST('2024-05-08 12:35:29.1234567 +12:15' AS DATETIME2(7)) AS 'datetime2',
CAST('2024-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 |
2024-05-08 |
smalldatetime |
2024-05-08 12:35:00 |
datetime |
2024-05-08 12:35:29.123 |
datetime2 |
2024-05-08 12:35:29.1234567 |
datetimeoffset |
2024-05-08 12:35:29.1234567 +12:15 |