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 hora de um dia. A hora é sem consciência de fuso horário e é baseada em um relógio de 24 horas.
Note
As informações da Informatica são fornecidas para clientes da PDW usando o Informatica Connector.
Descrição do horário
| Property | Value |
|---|---|
| Syntax | tempo [ (segunda escala fracionária) ] |
| Usage | DECLARAR @MyTime hora(7) CRIAR TABELA Tabela1 ( Coluna 1 tempo(7) ) |
| escala de segundos fracionários | Especifica o número de dígitos para a parte fracionária dos segundos. Este pode ser um número inteiro de 0 a 7. Para a Informatica, isso pode ser um número inteiro de 0 a 3. A escala fracionária padrão é 7 (100ns). No Microsoft Fabric, isso pode ser um número inteiro de 0 a 6, sem padrão. A precisão deve ser especificada no Microsoft Fabric. |
| Formato literal de cadeia de caracteres padrão (usado para cliente de nível inferior) |
hh:mm:ss[.nnnnnnn] para Informática) Para obter mais informações, consulte a seção Compatibilidade com versões anteriores para clientes de nível inferior . |
| Range | 00:00:00.0000000 até 23:59:59.9999999 (00:00:00.000 até 23:59:59.999 para Informatica) |
| Intervalos de elementos | hh são dois dígitos, variando de 0 a 23, que representam a hora. mm são dois dígitos, variando de 0 a 59, que representam o minuto. ss são dois dígitos, variando de 0 a 59, que representam o segundo. n* é de zero a sete dígitos, variando de 0 a 9999999, que representam os segundos fracionários. Para a Informatica, n* é de zero a três dígitos, variando de 0 a 999. |
| Comprimento da personagem | Mínimo de 8 posições (hh:mm:ss) a máximo de 16 posições (hh:mm:ss.nnnnnnn). Para a Informatica, o máximo é 12 (hh:mm:ss.nnn). |
| Precisão, escala (o usuário especifica apenas a escala) |
Veja a tabela abaixo. |
| Tamanho de armazenamento | 5 bytes, fixo, é o padrão com o padrão de 100ns de precisão de segundo fracionário. Na Informatica, o padrão é de 4 bytes, fixo, com o padrão de 1ms de precisão de segundo fracionário. |
| Accuracy | 100 nanossegundos (1 milissegundo em Informatica) |
| Valor predefinido | 00:00:00 Esse valor é usado para a parte de hora anexada para conversão implícita de date para datetime2 ou datetimeoffset. |
| 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 |
| Escala especificada | Resultado (precisão, escala) | Comprimento da coluna (bytes) | Fractional seconds precisão |
|---|---|---|---|
| time | (16,7) [(12,3) em Informática] | 5 (4 em Informática) | 7 (3 em Informática) |
| time(0) | (8,0) | 3 | 0-2 |
| time(1) | (10,1) | 3 | 0-2 |
| time(2) | (11,2) | 3 | 0-2 |
| time(3) | (12,3) | 4 | 3-4 |
| Tempo(4)* | (13,4) | 4 | 3-4 |
| tempo(5)* | (14,5) | 5 | 5-7 |
| Tempo(6)* | (15,6) | 5 | 5-7 |
| tempo(7)* + | (16,7) | 5 | 5-7 |
* Não suportado na Informatica.
+ Não suportado no Microsoft Fabric.
Formatos literais de cadeia de caracteres suportados para o tempo
A tabela a seguir mostra os formatos literais de cadeia de caracteres válidos para o tipo de dados de tempo .
| SQL Server | Description |
|---|---|
| hh:mm[:ss][:frações de segundos][AM][PM] hh:mm[:ss][.frações de segundo][AM][PM] hhAM[PM] hh AM[PM] |
O valor de hora 0 representa a hora após a meia-noite (AM), independentemente de AM ser especificado. PM não pode ser especificado quando a hora é igual a 0. Os valores de hora de 01 a 11 representam as horas antes do meio-dia se nem AM nem PM forem especificados. Os valores representam as horas antes do meio-dia quando a AM é especificada. Os valores representam horas após o meio-dia se PM for especificado. O valor da hora 12 representa a hora que começa ao meio-dia se nem AM nem PM forem especificados. Se AM for especificado, o valor representa a hora que começa à meia-noite. Se PM for especificado, o valor representa a hora que começa ao meio-dia. Por exemplo, 12:01 é 1 minuto depois do meio-dia, assim como 12:01; e 12h01 é um minuto depois da meia-noite. Especificar 12:01 AM é o mesmo que especificar 00:01 ou 00:01 AM. Os valores de hora de 13 a 23 representam horas após o meio-dia se AM ou PM não for especificado. Os valores também representam as horas após o meio-dia quando a PM é especificada. A AM não pode ser especificada quando o valor da hora é de 13 a 23. Um valor de hora de 24 não é válido. Para representar a meia-noite, use 12:00 ou 00:00. Os milissegundos podem ser precedidos por dois pontos (:) ou um ponto (.). Se forem utilizados dois pontos, o número significa milésimos de segundo. Se for utilizado um período, um único algarismo significa décimos de segundo, dois algarismos significam centésimos de segundo e três algarismos significam milésimos de segundo. Por exemplo, 12:30:20:1 indica 20 e um milésimo segundo depois das 12:30; 12:30:20.1 indica 20 e um décimo segundos depois das 12:30. |
| Certificação ISO 8601 | Notes |
|---|---|
| hh:mm:ss hh:mm[:ss][.frações de segundos] |
HH são dois dígitos, variando de 0 a 23, que representam o número de horas no desvio 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. |
| ODBC | Notes |
|---|---|
| {t 'hh:mm:ss[.fractional seconds]'} | Específico da API ODBC. |
Conformidade com as normas ANSI e ISO 8601
O uso da hora 24 para representar a meia-noite e o segundo bissexto acima de 59, conforme definido pela ISO 8601 (5.3.2 e 5.3), não é suportado para ser compatível com versões anteriores e consistente com os tipos de data e hora existentes.
O formato literal de cadeia de caracteres padrão (usado para cliente de nível inferior) será alinhado com o formulário padrão SQL, que é definido como hh:mm:ss[.nnnnnnn]. Este formato assemelha-se à definição ISO 8601 para TIME, excluindo segundos fracionários.
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 | YYYY-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 |
Convertendo 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 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 (Transact-SQL)
Convertendo o tipo de dados de hora(n) em outros tipos de data e hora
Esta seção descreve o que ocorre quando um tipo de dados de hora é convertido em outros tipos de dados de data e hora.
Quando a conversão é para time(n), a hora, o minuto e os segundos são copiados. Quando a precisão de destino é menor do que a precisão de origem, os segundos fracionários são arredondados para cima para ajustar a precisão de destino. O exemplo a seguir mostra os resultados da conversão de um valor time(4) em um valor time(3).
DECLARE @timeFrom TIME(4) = '12:34:54.1237';
DECLARE @timeTo TIME(3) = @timeFrom;
SELECT @timeTo AS 'time(3)', @timeFrom AS 'time(4)';
Aqui está o conjunto de resultados.
time(3) time(4)
------------ -------------
12:34:54.124 12:34:54.1237
Se a conversão for até a data, a conversão falhará e a mensagem de erro 206 será gerada: "Conflito de tipo de operando: data é incompatível com a hora".
Quando a conversão é para datetime, os valores de hora, minuto e segundo são copiados; e o componente de data está definido como '1900-01-01'. Quando a precisão de segundos fracionários do valor time(n) for maior que três dígitos, o resultado datetime será truncado. O código a seguir mostra os resultados da conversão de um valor time(4) em um valor datetime.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime DATETIME = @time;
SELECT @time AS '@time', @datetime AS '@datetime';
Aqui está o conjunto de resultados.
@time @datetime
------------- -----------------------
12:15:04.1237 1900-01-01 12:15:04.123
Quando a conversão é para smalldatetime, a data é definida como '1900-01-01', e os valores de hora e minuto são arredondados para cima. 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 time(4) em um valor smalldatetime.
Mostrar arredondamento para cima do valor do minuto:
DECLARE @time TIME(4) = '12:15:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Aqui está o conjunto de resultados.
@time @smalldatetime
---------------- -----------------------
12:15:59.9999 1900-01-01 12:16:00--
Mostrar arredondamento para cima do valor da hora:
DECLARE @time TIME(4) = '12:59:59.9999';
DECLARE @smalldatetime SMALLDATETIME = @time;
SELECT @time AS '@time', @smalldatetime AS '@smalldatetime';
Aqui está o conjunto de resultados.
@time @smalldatetime
---------------- -----------------------
12:59:59.9999 1900-01-01 13:00:00
Se a conversão for para datetimeoffset(n), a data é definida como '1900-01-01' e a hora é copiada. O deslocamento de fuso horário é definido como +00:00. Quando a precisão de segundos fracionários do valor time(n) é maior do que a precisão do valor datetimeoffset(n), o valor é arredondado para ajuste. O exemplo a seguir mostra os resultados da conversão de um time(4) valor em um datetimeoffset(3) tipo.
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetimeoffset DATETIMEOFFSET(3) = @time;
SELECT @time AS '@time', @datetimeoffset AS '@datetimeoffset';
Aqui está o conjunto de resultados.
@time @datetimeoffset
------------- ------------------------------
12:15:04.1237 1900-01-01 12:15:04.124 +00:00
Ao converter para datetime2(n), a data é definida como '1900-01-01', o componente de hora é copiado e o deslocamento de fuso horário é definido como 00:00. Quando a precisão de segundos fracionários do valor datetime2(n) for maior do que o valor time(n), o valor será arredondado para ajustar. O exemplo a seguir mostra os resultados da conversão de um valor time(4) em um valor datetime2(2).
DECLARE @time TIME(4) = '12:15:04.1237';
DECLARE @datetime2 DATETIME2(3) = @time;
SELECT @datetime2 AS '@datetime2', @time AS '@time';
Aqui está o conjunto de resultados.
@datetime2 @time
----------------------- -------------
1900-01-01 12:15:04.124 12:15:04.1237
Convertendo literais de cadeia de caracteres em tempo(n)
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 estarã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 tempo .
| Literal da cadeia de caracteres de entrada | Regra de Conversão |
|---|---|
| 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 tipos de tempo causará uma conversão implícita entre datetime e esse tipo, conforme definido pelas regras de conversão. |
| ODBC TIME | Consulte a regra ODBC DATE acima. |
| ODBC DATA-HORA | Consulte a regra ODBC DATE acima. |
| Apenas DATA | Os valores padrão são fornecidos. |
| SÓ TEMPO | Trivial |
| Apenas FUSO HORÁRIO | Os valores padrão são fornecidos. |
| DATA + HORA | A parte TIME da cadeia de caracteres de entrada é usada. |
| DATA + FUSO HORÁRIO | Não permitido. |
| HORA + FUSO HORÁRIO | A parte TIME da cadeia de caracteres de entrada é usada. |
| DATA + HORA + FUSO HORÁRIO | A parte TIME do DATETIME local será usada. |
Examples
A. Comparando tipos de dados de data e hora
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';
| 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 |
B. Inserindo literais de cadeia de caracteres de tempo válidos em uma coluna time(7)
A tabela a seguir lista diferentes literais de cadeia de caracteres que podem ser inseridos em uma coluna do tipo de dados time(7) com os valores que são armazenados nessa coluna.
| Tipo de formato literal de cadeia de caracteres | Literal de cadeia de caracteres inserida | valor time(7) armazenado | Description |
|---|---|---|---|
| SQL Server | '01:01:01:123AM' | 01:01:01.1230000 | Quando dois pontos (:) vem antes da precisão de segundos fracionários, a escala não pode exceder três posições ou um erro será gerado. |
| SQL Server | '01:01:01.1234567 AM' | 01:01:01.1234567 | Quando AM ou PM é especificado, a hora é armazenada no formato de 24 horas sem o literal AM ou PM |
| SQL Server | '01:01:01.1234567 PM' | 13:01:01.1234567 | Quando AM ou PM é especificado, a hora é armazenada no formato de 24 horas sem o literal AM ou PM |
| SQL Server | '01:01:01.1234567PM' | 13:01:01.1234567 | Um espaço antes da AM ou PM é opcional. |
| SQL Server | '01AM' | 01:00:00.0000000 | Quando apenas a hora é especificada, todos os outros valores são 0. |
| SQL Server | '01 AM' | 01:00:00.0000000 | Um espaço antes da AM ou PM é opcional. |
| SQL Server | '01:01:01' | 01:01:01.0000000 | Quando a precisão de segundos fracionários não é especificada, cada posição definida pelo tipo de dados é 0. |
| Certificação ISO 8601 | '01:01:01.1234567' | 01:01:01.1234567 | Para estar em conformidade com a ISO 8601, use o formato de 24 horas, não AM ou PM. |
| Certificação ISO 8601 | '01:01:01.1234567 +01:01' | 01:01:01.1234567 | A diferença de fuso horário opcional (TZD) é permitida na entrada, mas não é armazenada. |
C. Inserindo literal de cadeia de caracteres de tempo em colunas de cada tipo de data e hora
Na tabela a seguir, a primeira coluna mostra um literal de cadeia de caracteres de hora a ser inserido em uma coluna de tabela de banco de dados do tipo de dados de data ou hora mostrado na segunda coluna. A terceira coluna mostra o valor que será armazenado na coluna da tabela do banco de dados.
| Literal de cadeia de caracteres inserida | Tipo de dados de coluna | Valor armazenado na coluna | Description |
|---|---|---|---|
| '12:12:12.1234567' | time(7) | 12:12:12.1234567 | Se a precisão de segundos fracionários exceder o valor especificado para a coluna, a cadeia de caracteres será truncada sem erro. |
| '2007-05-07' | date | NULL | Qualquer valor de tempo fará com que a instrução INSERT falhe. |
| '12:12:12' | smalldatetime | 1900-01-01 12:12:00 | Qualquer valor de precisão de segundos fracionários fará com que a instrução INSERT falhe. |
| '12:12:12.123' | datetime | 1900-01-01 12:12:12.123 | Qualquer segunda precisão superior a três posições fará com que a instrução INSERT falhe. |
| '12:12:12.1234567' | datetime2(7) | 1900-01-01 12:12:12.1234567 | Se a precisão de segundos fracionários exceder o valor especificado para a coluna, a cadeia de caracteres será truncada sem erro. |
| '12:12:12.1234567' | datetimeoffset(7) | 1900-01-01 12:12:12.1234567 +00:00 | Se a precisão de segundos fracionários exceder o valor especificado para a coluna, a cadeia de caracteres será truncada sem erro. |