datetime (Transact-SQL)
Define uma data combinada com uma hora do dia que inclui frações de segundos e se baseia em um período de 24 horas.
Observação |
---|
Use os tipos de dados time, date, datetime2 e datetimeoffset para o novo trabalho. Esses tipos estão de acordo com o SQL padrão. Eles são mais portáteis. time, datetime2 e datetimeoffset fornecem mais precisão em segundos. datetimeoffset fornece suporte de fuso horário para aplicativos globalmente implantados. |
Descrição de datetime
Propriedade |
Valor |
---|---|
Sintaxe |
datetime |
Uso |
DECLARE @MyDatetime datetime CREATE TABLE Table1 ( Column1 datetime ) |
Formatos de literais de cadeia de caracteres padrão (usado para cliente de nível inferior) |
Não aplicável |
Intervalo de datas |
Janeiro 1, 1753, a dezembro 31, 9999 |
Intervalo de horas |
00:00:00 a 23:59:59.997 |
Intervalo de deslocamento de fuso horário |
Nenhum |
Intervalos de elementos |
AAAA 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 do 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* vai de zero a três dígitos, variando de 0 a 999, representando as frações de segundo. |
Comprimento de caracteres |
19 posições no mínimo e 23 no máximo |
Tamanho de armazenamento |
8 bytes |
Precisão |
Os valores são arredondados em incrementos de .000, .003 ou .007 segundos. |
Valor padrão |
1900-01-01 00:00:00 |
Calendário |
Gregoriano (não inclui o intervalo completo de anos.) |
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 para datetime
As tabelas a seguir listam os formatos de literais de cadeia de caracteres com suporte para datetime. Exceto para ODBC, os literais de cadeia de caracteres datetime estão entre aspas simples ('), por exemplo, 'string_literaL.' Se o ambiente não for us_english, os literais de cadeia de caracteres devem estar no formato N'string_literaL'.
Numérico |
Descrição |
---|---|
Formatos de data: [0]4/15/[19]96--(mda) [0]4-15-[19]96 -- (mda) [0]4.15.[19]96 -- (mda) [0]4/[19]96/15 -- (mad) 15/[0]4/[19]96 -- (dma) 15/[19]96/[0]4 -- (dam) [19]96/15/[0]4 -- (adm) [19]96/[0]4/15 -- (amd) Formatos de hora: 14:30 14:30[:20:999] 14:30[:20.9] 4am 4 PM |
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 um formato de data numérico, especifique o mês, o dia e o ano em uma cadeia de caracteres com barras (/), hífens (-) ou pontos (.) como separadores. Essa cadeia de caracteres deve ser exibida da seguinte forma:
Quando o idioma é definido como us_english, a ordem padrão da data é mda. Você pode alterar a ordem da data usando a instrução SET DATEFORMAT. A configuração de SET DATEFORMAT determina como são interpretados os valores de data. Se a ordem não corresponder à configuração, os valores não serão interpretados como datas, porque eles estarão fora do intervalo ou serão mal-interpretados. Por exemplo, 12/10/08 pode ser interpretada como uma de seis datas, dependendo da configuração DATEFORMAT. Um ano de quatro partes é interpretado como o ano. |
Alfabético |
Descrição |
---|---|
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] |
Você pode especificar dados de data com um mês especificado como o nome de mês cheio. Por exemplo, abril ou a abreviação Apr especificadas na linguagem atual; vírgulas são opcionais e não há diferenciação entre letras maiúsculas e minúsculas. Aqui estão algumas diretrizes para o uso de formatos de data alfabéticos:
A configuração de sessão SET DATEFORMAT não é aplicada quando você especifica o mês de forma alfabética. |
ISO 8601 |
Descrição |
---|---|
AAAA-MM-DDThh:mm:ss[.mmm] AAAAMMDD[ hh:mm:ss[.mmm]] |
Exemplos:
Para usar o formato ISO 8601, você deve especificar cada elemento no formato. Isto também inclui o T, os dois pontos (:) e o ponto final (.) que são mostrados no formato. Os parênteses indicam que o componente de fração de segundo é opcional. O componente de hora é especificado no formato de 24 horas. O T indica o início da parte de hora do valor datetime. A vantagem de usar o formato ISO 8601 é que ele é um padrão internacional com especificação não ambígua. Além disso, esse formato não é afetado pela configuração SET DATEFORMAT ou SET LANGUAGE. |
Não separado |
Descrição |
---|---|
AAAAMMDDThh:mm:ss[.mmm] |
ODBC |
Descrição |
||||||||
---|---|---|---|---|---|---|---|---|---|
{ ts '1998-05-02 01:23:56.123' } { d '1990-10-02' } { t '13:33:41' } |
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 de ODBC também é suportado pela definição de idioma OLE DB (DBGUID-SQL) suportada pelo Microsoftprovedor OLE DB para SQL Server. Os aplicativos que usam ADO, OLE DB e as APIs baseadas em ODBC podem usar esse formato de carimbo de data/hora de ODBC para representar datas e horas. As sequências de escape de carimbo de data/hora ODBC estão no formato: { literal_type 'constant_value' }:
|
Arredondando a precisão de segundo fracionário de datetime
Os valores datetime são arredondados em incrementos de .000, .003 ou .007 segundos, como mostrado na seguinte tabela.
Valor especificado pelo usuário |
Valor armazenado pelo sistema |
---|---|
01/01/98 23:59:59.999 |
1998-01-02 00:00:00.000 |
01/01/98 23:59:59.995 01/01/98 23:59:59.996 01/01/98 23:59:59.997 01/01/98 23:59:59.998 |
1998-01-01 23:59:59.997 |
01/01/98 23:59:59.992 01/01/98 23:59:59.993 01/01/98 23:59:59.994 |
1998-01-01 23:59:59.993 |
01/01/98 23:59:59.990 01/01/98 23:59:59.991 |
1998-01-01 23:59:59.990 |
Conformidade com ANSI e ISO 8601
datetime não está em conformidade com ANSI ou ISO 8601.
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 datetime em outros tipos de data e hora
A tabela a seguir descreve o que ocorre quando um tipo de dados datetime é convertido em outros tipos de dados de data e hora.
Tipo de dados para converter em |
Detalhes da conversão |
---|---|
date |
O ano, o mês e o dia são copiados. 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.
|
time(n) |
O componente de hora é copiado e o componente de data é definido como '1900-01-01'. Quando a precisão fracionária do valor time(n) é maior do que três dígitos, o valor é truncado para ser ajustado. O exemplo a seguir mostra os resultados da conversão de um valor time(4) em um valor datetime.
|
smalldatetime |
As horas e os minutos são copiados. Os segundos e as frações de segundo são definidos como 0. O código a seguir mostra os resultados da conversão de um valor smalldatetime em um valor datetime.
|
datetimeoffset(n) |
Os componentes de data e hora são copiados. O fuso horário é truncado. Quando a precisão fracionária do valor datetimeoffset(n) é maior do 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.
|
datetime2(n) |
A data e a hora são copiadas. Quando a precisão fracionária do valor datetime2(n) é maior do 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.
|
Exemplos
O exemplo a seguir compara os resultados da conversão de uma cadeia de caracteres para cada tipo de dados de date e time.
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 |