Tipos de dados de data e hora¶
O Snowflake oferece suporte a tipos de dados para gerenciar datas, horas e carimbos de data/hora (data e hora combinados). O Snowflake também oferece suporte a formatos para constantes de cadeia de caracteres usadas na manipulação de datas, horas e carimbos de data/hora.
Tipos de dados¶
O Snowflake oferece suporte aos seguintes tipos de dados de data e hora:
Nota
Para dados de DATE e TIMESTAMP, o Snowflake recomenda usar anos entre 1582 e 9999. O Snowflake oferece suporte a alguns anos fora deste intervalo, mas anos anteriores a 1582 devem ser evitados devido a limitações no calendário gregoriano.
DATE¶
O Snowflake oferece suporte a apenas um tipo de dados de DATE para armazenamento de datas (sem elementos de hora).
DATE aceita datas nas formas mais comuns (YYYY-MM-DD, DD-MON-YYYY e assim por diante).
Além disso, todos os valores TIMESTAMP aceitos são entradas válidas para datas, mas as informações de TIME são truncadas.
DATETIME¶
DATETIME é sinônimo de TIMESTAMP_NTZ.
Tipos de dados de intervalo¶
Os tipos de dados de intervalo armazenam valores que representam uma duração de tempo. Você pode calcular um intervalo como a diferença entre duas datas ou horários. Um intervalo define apenas uma duração, portanto, ele não tem um ponto inicial ou final no tempo. Por exemplo, você pode definir um intervalo como três anos e sete meses.
O Snowflake oferece suporte às seguintes variações de ano-mês de tipos de dados de intervalo:
Tipo de dados |
Descrição |
|---|---|
INTERVAL YEAR |
Representa uma duração de tempo em anos. |
INTERVAL YEAR TO MONTH |
Representa uma duração de tempo em anos e meses. |
INTERVAL MONTH |
Representa uma duração de tempo em meses. |
O Snowflake oferece suporte às seguintes variações de dia-hora de tipos de dados de intervalo:
Tipo de dados |
Descrição |
|---|---|
INTERVAL DAY |
Representa uma duração de tempo em dias. |
INTERVAL DAY TO HOUR |
Representa uma duração de tempo em dias e horas. |
INTERVAL DAY TO MINUTE |
Representa uma duração de tempo em dias, horas e minutos. |
INTERVAL DAY TO SECOND |
Representa uma duração de tempo em dias, horas, minutos, segundos e segundos fracionários. |
INTERVAL HOUR |
Representa uma duração de tempo em horas. |
INTERVAL HOUR TO MINUTE |
Representa uma duração de tempo em horas e minutos. |
INTERVAL HOUR TO SECOND |
Representa uma duração de tempo em horas, minutos, segundos e segundos fracionários. |
INTERVAL MINUTE |
Representa uma duração de tempo em minutos. |
INTERVAL MINUTE TO SECOND |
Representa uma duração de tempo em minutos, segundos e segundos fracionários. |
INTERVAL SECOND |
Representa uma duração de tempo em segundos e segundos fracionários. |
As seções a seguir descrevem em mais detalhes os tipos de dados de intervalo:
Nota
Você também pode usar constantes de intervalo para aritmética de data e hora. No entanto, as constantes de intervalo não oferecem suporte ao armazenamento de intervalo como tipo de coluna.
Benefícios dos tipos de dados de intervalo¶
Os tipos de dados de intervalo oferecem os seguintes benefícios:
Garantir a aritmética de datas precisas sem ambiguidade.
Eliminar a necessidade de conversão manual de durações baseadas em números inteiros.
Otimizar o armazenamento de dados que representam intervalos de tempo.
Otimizar a execução de consultas para dados de duração.
Simplificar a migração de dados de bancos de dados de terceiros, como Databricks, Oracle e Teradata.
Cumprir os padrões da ANSI.
Sintaxe dos tipos de dados de intervalo¶
Para especificar um tipo de dados de intervalo, use a seguinte sintaxe:
Onde:
Propriedades:
precisioné o número total de dígitos permitido. A precisão pode variar de1a9.Padrão:
9fractional_seconds_precisioné o número de dígitos na parte fracionária de um segundo. A precisão de tempo pode variar de0(segundos) a9(nanossegundos).Padrão:
9
Use esta sintaxe quando especificar um tipo de dados de intervalo. Por exemplo, a seguinte tabela tem a coluna duration do tipo INTERVAL YEAR TO MONTH:
Representando valores de intervalo¶
Você pode representar um valor de intervalo usando um literal ou formato de intervalo:
Literais de intervalo¶
Literal de intervalo é uma expressão que especifica uma duração de tempo em um literal de cadeia de caracteres. Use a seguinte sintaxe para especificar um literal de intervalo:
Onde:
signé um símbolo opcional que especifica uma duração de tempo positiva (+) ou negativa (-).Padrão:
+.stringé um valor que representa uma duração de tempo.yearMonthQualifieré um qualificador definido em Sintaxe dos tipos de dados de intervalo.dayTimeQualifieré um qualificador definido em Sintaxe dos tipos de dados de intervalo.
Formatos de intervalo¶
Literais de cadeia de caracteres em formatos específicos podem representar valores de intervalo.
Para especificar valores de anos e meses, use o seguinte formato:
Onde:
signé um símbolo obrigatório que especifica uma duração de tempo positiva (+) ou negativa (-).Padrão:
+.Yé o número de anos. O número de dígitos permitido (precisão) depende do tipo de dados do valor.MMrepresenta os dois dígitos para o número de meses, de00a11.
Para especificar valores de dias, horas, segundos e segundos fracionários, use o seguinte formato:
Onde:
signé um símbolo obrigatório que especifica uma duração de tempo positiva (+) ou negativa (-).Padrão:
+.Dé o número de dias. O número de dígitos permitido (precisão) depende do tipo de dados do valor.Omita
Dpara valores dos seguintes tipos:INTERVAL HOUR
INTERVAL HOUR TO MINUTE
INTERVAL HOUR TO SECOND
INTERVAL MINUTE
INTERVAL MINUTE TO SECOND
INTERVAL SECOND
HH24representa os dois dígitos para o número de horas, de00a23.Omita
HH24para valores dos seguintes tipos:INTERVAL DAY
INTERVAL MINUTE
INTERVAL MINUTE TO SECOND
INTERVAL SECOND
MIrepresenta os dois dígitos para o número de minutos, de00a59.Omita
MIpara valores dos seguintes tipos:INTERVAL DAY TO HOUR
INTERVAL DAY
INTERVAL HOUR
INTERVAL SECOND
SSrepresenta os dois dígitos para o número de segundos, de00a59.Omita
SSpara valores dos seguintes tipos:INTERVAL DAY
INTERVAL DAY TO HOUR
INTERVAL DAY TO MINUTE
INTERVAL HOUR
INTERVAL HOUR TO MINUTE
INTERVAL MINUTE
Fé o número de segundos fracionários para os tipos de dados que incluem segundos. O número de dígitos permitido (precisão) depende do tipo de dados do valor.
As seguintes notas de uso se aplicam a literais de cadeia de caracteres no formato de intervalo:
A representação do literal de cadeia de caracteres se aplica quando você usa a função CAST ou TO_CHAR para converter intervalos explicitamente em cadeias de caracteres de texto.
Zeros iniciais em um campo especificam a precisão.
Exemplos de valores de intervalo¶
A tabela a seguir mostra como representar vários valores de intervalo. Os valores mostrados na tabela estão em conformidade com as seguintes regras para valores de intervalo:
Para valores positivos, o sinal de mais
+é opcional para valores de literal de intervalo, mas obrigatório para valores de formato de intervalo.Nos valores de literal de intervalo, o valor entre parênteses especifica a precisão, que é o número de dígitos permitido. Por exemplo,
YEAR(3)especifica que três dígitos são permitidos no ano.Nos valores de formato de intervalo, o campo primário (campo inicial) não inclui zeros iniciais. Os campos subordinados utilizam um número fixo de dígitos. Por exemplo, em um valor YEAR TO MONTH, como
+1-08, o campo do ano não tem zeros iniciais e o campo do mês usa dois dígitos.
Duração |
Tipo |
Valor de literal de intervalo |
Valor de formato de intervalo |
|---|---|---|---|
5 anos positivos |
INTERVAL YEAR |
|
|
1 ano e 8 meses positivo |
INTERVAL YEAR TO MONTH |
|
|
5 meses negativos |
INTERVAL MONTH |
|
|
14 meses positivos |
INTERVAL MONTH |
|
|
44 anos e 11 meses negativos |
INTERVAL YEAR TO MONTH |
|
|
11 dias, 10 horas e 9 minutos positivos |
INTERVAL DAY TO MINUTE |
|
|
2 dias, 23 horas, 8 minutos, 23 segundos e 275 milissegundos positivos |
INTERVAL DAY TO SECOND |
|
|
4 segundos e 300 milissegundos positivos |
INTERVAL SECOND |
|
|
Operações que envolvem valores de data e hora¶
A tabela a seguir mostra o tipo de dados do resultado para operações aritméticas válidas que envolvem valores de intervalo:
Primeiro operando |
Operador |
Segundo operando |
Tipo de resultado |
|---|---|---|---|
Carimbo de data/hora |
|
Carimbo de data/hora |
Um tipo de dados de intervalo |
Data ou carimbo de data/hora |
|
Intervalo |
DATE DATETIME, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ |
Data ou carimbo de data/hora |
|
Intervalo |
DATE DATETIME, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ |
Intervalo |
|
Data ou carimbo de data/hora |
DATE DATETIME, TIMESTAMP_LTZ, TIMESTAMP_NTZ ou TIMESTAMP_TZ |
Numérico |
|
Intervalo |
Um tipo de dados de intervalo |
Intervalo |
|
Numérico |
Um tipo de dados de intervalo |
Intervalo |
|
Numérico |
Um tipo de dados de intervalo |
Intervalo |
|
Intervalo |
Um tipo de dados de intervalo |
Intervalo |
|
Intervalo |
Um tipo de dados de intervalo |
Para operações que envolvem dois valores de intervalo, eles devem ser valores de intervalo de ano-mês ou de dia-hora. Não há suporte para operações que misturam valores de intervalo de ano-mês e de dia-hora. Quando a operação envolve dois valores de intervalo de ano-mês, o tipo de resultado é um intervalo de ano-mês. Quando a operação envolve dois valores de intervalo de dia-hora, o tipo de resultado é de intervalo de dia-hora.
Funções que aceitam valores de intervalo como argumentos¶
As seguintes funções aceitam valores de intervalo como argumentos:
Exemplos de tipos de dados de intervalo¶
Os seguintes exemplos mostram como usar tipos de dados de intervalo:
Operando aritmética com dados de intervalo¶
Os exemplos a seguir operam aritmética com dados de intervalo.
Adicionar um ano e um mês a uma data:
Subtrair um ano e um mês de uma data:
Adicionar um período de tempo a um carimbo de data/hora:
O seguinte exemplo usa a função SYSTEM$TYPEOF para mostrar que um valor INTERVAL DAY TO SECOND é retornado quando uma consulta subtrai dois valores de carimbo de data/hora:
Para visualizar os resultados da consulta no formato de intervalo, você pode converter a expressão no tipo de dados INTERVAL DAY(2) TO SECOND(2) para especificar a precisão e, depois, converter em VARCHAR:
Inserindo e consultando dados de intervalo de ano-mês¶
Crie uma tabela que rastreie os candidatos às posições abertas com uma coluna INTERVAL YEAR TO MONTH e insira os dados:
Quando você consulta a tabela sem converter a coluna duration_of_experience` em um tipo de dados, a saída mostra os valores da coluna como o número total de meses em cada linha:
Quando você consulta a tabela e converte a coluna duration_of_experience no tipo de dados VARCHAR, a saída mostra os valores da coluna no formato de intervalo:
Inserindo e consultando dados de intervalo de dia-hora¶
Crie uma tabela que especifique a duração do tempo limite para vários recursos de software com uma coluna INTERVAL HOUR TO SECOND e insira os dados:
Consulte a tabela e converta a coluna timeout_duration no tipo de dados VARCHAR:
Copiando dados de intervalo em uma tabela e consultando a tabela¶
Conclua as etapas a seguir para preparar um arquivo com dados de intervalo e, em seguida, copie o arquivo em uma tabela:
Em um arquivo em seu sistema de arquivos, copie o seguinte conteúdo:
Este exemplo assume que o nome do arquivo é
interval_values.csvno diretório/examples/intervals/.Crie uma área de preparação:
No local da área de preparação interna, prepare o arquivo:
Crie uma tabela para os dados:
Para carregar o arquivo preparado na tabela que você criou, use o comando COPY INTO <tabela>:
Para visualizar os dados carregados, consulte a tabela e converta no tipo VARCHAR:
Limitações para tipos de dados de intervalo¶
As seguintes limitações se aplicam aos tipos de dados de intervalo:
Os valores de intervalo de ano-mês não podem ser combinados ou comparados com valores de intervalo de dia-hora.
Constantes de intervalo e valores do tipo de dados de intervalo não podem ser combinados ou comparados.
As constantes de intervalo não podem ser inseridas em uma coluna que tenha um tipo de dados de intervalo.
Os valores VARIANT não podem conter valores de intervalo.
Os valores de tipo de dados estruturados não podem conter valores de intervalo.
As expressões de intervalo não podem ser usadas em funções definidas pelo usuário (User-Defined Functions, UDFs) ou no Snowflake Scripting.
Os seguintes tipos de tabelas não podem ter colunas de intervalo:
Consultas em colunas de intervalo não podem se beneficiar do Serviço de otimização de pesquisa.
TIME¶
O Snowflake oferece suporte a apenas um tipo de dados de TIME para armazenamento de hora no formato de HH:MI:SS.
TIME oferece suporte a um parâmetro de precisão opcional para segundos fracionários (por exemplo, TIME(3)). A precisão do tempo pode variar de 0 (segundos) a 9 (nanossegundos). A precisão padrão é 9.
Todos os valores de TIME devem estar entre 00:00:00 e 23:59:59.999999999. TIME armazena internamente a hora do “relógio de parede”, e todas as operações com valores de TIME são realizadas sem levar em consideração o fuso horário.
TIMESTAMP_LTZ , TIMESTAMP_NTZ , TIMESTAMP_TZ¶
O Snowflake oferece suporte a três variações de carimbo de data/hora:
- TIMESTAMP_LTZ:
TIMESTAMP_LTZ armazena internamente os valores UTC com uma precisão especificada. Entretanto, todas as operações são realizadas no fuso horário da sessão atual, controlado pelo parâmetro de sessão TIMEZONE.
Sinônimo de TIMESTAMP_LTZ:
TIMESTAMPLTZ
TIMESTAMP WITH LOCAL TIME ZONE
- TIMESTAMP_NTZ:
TIMESTAMP_NTZ armazena internamente a hora do “relógio de parede” com uma precisão especificada. Todas as operações são realizadas sem considerar o fuso horário.
Se o formato de saída contiver um fuso horário, o indicador de UTC (
Z) é exibido.TIMESTAMP_NTZ é o padrão para TIMESTAMP.
Sinônimo de TIMESTAMP_NTZ:
TIMESTAMPNTZ
TIMESTAMP WITHOUT TIME ZONE
DATETIME
- TIMESTAMP_TZ:
TIMESTAMP_TZ armazena internamente os valores UTC juntamente com um deslocamento de fuso horário associado. Quando um fuso horário não é fornecido, é usado o deslocamento de fuso horário da sessão. Todas as operações são realizadas com o deslocamento de fuso horário específico para cada registro.
Sinônimo de TIMESTAMP_TZ:
TIMESTAMPTZ
TIMESTAMP WITH TIME ZONE
Os valores de TIMESTAMP_TZ são comparados com base em suas horas em UTC. Por exemplo, a seguinte comparação entre diferentes horas em diferentes fusos horários retorna TRUE porque os dois valores têm horas equivalentes em UTC.
Atenção
Atualmente, TIMESTAMP_TZ armazena apenas o deslocamento de um determinado fuso horário, não o fuso horário real, no momento da criação para um determinado valor. Isto é especialmente importante para o horário de verão, que não é utilizado pelo UTC.
Por exemplo, com o parâmetro TIMEZONE definido como "America/Los_Angeles", a conversão de um valor para TIMESTAMP_TZ em janeiro de um determinado ano armazena o deslocamento de fuso horário de -0800. Se seis meses depois forem adicionados ao valor, o deslocamento -0800 será mantido, mesmo que em julho o deslocamento para Los Angeles seja -0700. Isto porque, depois que o valor é criado, a informação do fuso horário real ("America/Los_Angeles") não está mais disponível. A seguinte amostra de código ilustra esse comportamento:
TIMESTAMP¶
TIMESTAMP no Snowflake é um alias especificado pelo usuário associado a uma das variações de TIMESTAMP_*. Em todas as operações em que TIMESTAMP é usado, a variação associada de TIMESTAMP_* é automaticamente usada. O tipo de dados de TIMESTAMP nunca é armazenado em tabelas.
A variação de TIMESTAMP_* associada ao TIMESTAMP é especificada pelo parâmetro de sessão TIMESTAMP_TYPE_MAPPING. O padrão é TIMESTAMP_NTZ.
Todas as variações de carimbo de data/hora, bem como o alias TIMESTAMP, oferecem suporte a um parâmetro de precisão opcional para segundos fracionários (por exemplo, TIMESTAMP(3)). A precisão do carimbo de data/hora pode variar de 0 (segundos) a 9 (nanossegundos). A precisão padrão é 9.
Exemplos de carimbo de data/hora¶
Esses exemplos criam uma tabela usando diferentes carimbos de data/hora.
Primeiro, crie uma tabela com uma coluna TIMESTAMP (mapeada para TIMESTAMP_NTZ):
Em seguida, use explicitamente uma das variações TIMESTAMP (TIMESTAMP_LTZ):
Usar TIMESTAMP_LTZ com fusos horários diferentes:
Esta consulta mostra que o horário para 2 de janeiro é 08:00 em Los Angeles (que é 16:00 em UTC):
Em seguida, observe que os horários mudam com um fuso horário diferente:
Crie uma tabela e use TIMESTAMP_NTZ:
Observe que ambos os horários de fusos horários diferentes são convertidos para a mesma hora local:
Em seguida, observe que alterar o fuso horário da sessão não afeta os resultados:
Crie uma tabela e use TIMESTAMP_TZ:
Observe que o registro de 1º de janeiro herdou o fuso horário da sessão e America/Los_Angeles foi convertido em um deslocamento numérico de fuso horário:
Em seguida, observe que alterar o fuso horário da sessão não afeta os resultados:
Calendário com suporte¶
O Snowflake usa o calendário gregoriano para todas as datas e carimbos de data/hora. O calendário gregoriano começa no ano 1582, mas reconhece os anos anteriores, o que é importante observar porque o Snowflake não ajusta datas anteriores a 1582 (ou faz cálculos envolvendo datas anteriores a 1582) para corresponder ao calendário juliano. O elemento de formato UUUU oferece suporte a anos negativos.
Formatos de data e hora¶
Todos esses tipos de dados aceitam a maioria dos formatos não ambíguos de data, hora ou data e hora. Consulte Formatos com suporte para detecção AUTO para ver os formatos que o Snowflake reconhece quando configurado para detectar o formato automaticamente.
Você também pode especificar o formato de data e hora manualmente. Ao especificar o formato, você pode usar os elementos que não diferenciam maiúsculas e minúsculas listados na tabela a seguir:
Elemento de formato |
Descrição |
|---|---|
|
Ano de quatro dígitos [1]. |
|
Ano de dois dígitos [1], controlado pelo parâmetro de sessão TWO_DIGIT_CENTURY_START. Por exemplo, quando definido como |
|
Ano de um ou dois dígitos [2] sem zeros iniciais, controlado pelo parâmetro de sessão TWO_DIGIT_CENTURY_START. Por exemplo, quando o parâmetro é definido como |
|
Mês de dois dígitos [1] ( |
|
Mês de um ou dois dígitos [2] sem zeros iniciais ( |
|
Nome abreviado do mês: sup: |
|
Nome completo do mês: sup: |
|
Dia do mês de dois dígitos [1] ( |
|
Dia do mês de um ou dois dígitos [2] sem zeros iniciais ( |
|
Dia da semana abreviado. |
|
Dois dígitos [1] para hora ( |
|
Dois dígitos [1] para hora ( |
|
Um ou dois dígitos [2] para hora sem zeros iniciais ( |
|
Um ou dois dígitos [2] para hora sem zeros iniciais ( |
|
Antes do meio-dia ( |
|
Antes do meio-dia ( |
|
Sinônimo de |
|
Sinônimo de |
|
Dois dígitos [1] para minuto ( |
|
Um ou dois dígitos [2] para minuto sem zeros iniciais ( |
|
Dois dígitos [1] para segundo ( |
|
Um ou dois dígitos [2] para segundo sem zeros iniciais ( |
|
Segundos fracionários com precisão de |
|
Hora e minuto do fuso horário [1] de dois dígitos, ajustados em relação ao UTC. Pode ser prefixado por |
|
Ano de quatro dígitos no formato ISO, que são negativos para anos BCE. |
[1] O número de dígitos descreve a saída produzida ao serializar valores em texto. Ao analisar texto, o Snowflake aceita até o número especificado de dígitos. Por exemplo, o número de um dia pode ter um ou dois dígitos.
[2] O número de dígitos descreve a saída produzida ao serializar valores em texto. Não há suporte para análise. Se a análise for necessária, use um formato equivalente que inclua zeros iniciais. Estes elementos de formato serão habilitados no pacote BCR 2026_03.
[3] Para o elemento de formato MON, a saída retornou quando a serialização de valores em texto é o nome abreviado do mês. Para o elemento de formato MMMM, a saída retornou quando a serialização de valores em texto é o nome completo do mês. Ao analisar o texto, o Snowflake aceita a abreviação de três dígitos ou o nome completo do mês para ambos MON e MMMM. Por exemplo, «janeiro» ou «jan», «fevereiro» ou «fev», e assim por diante, são aceitos na análise de texto.
Nota
Quando se utiliza um formato somente de data, presume-se que a hora associada seja a meia-noite desse dia.
Qualquer elemento no formato entre aspas duplas ou elementos diferentes dos elementos acima é analisado/formatado sem ser interpretado. A Snowflake sempre recomenda incluir caracteres de literal entre aspas duplas (por exemplo,
"T","EST","Z") para garantir que sejam tratados como literais.Para obter mais detalhes sobre intervalos válidos, número de dígitos e práticas recomendadas, consulte Informações adicionais sobre o uso de formatos de data, hora e carimbo de data/hora.
Exemplos de uso de formatos de data e hora¶
O exemplo a seguir usa FF para indicar que a saída tem 9 dígitos no campo de segundos fracionários:
Constantes de data e hora¶
Constantes (também conhecidas como literais) são valores de dados fixos. O Snowflake oferece suporte ao uso de constantes de cadeias de caracteres para especificar valores fixos de data, hora ou carimbo de data/hora. As constantes de cadeias de caracteres devem estar sempre posicionadas entre caracteres delimitadores. O Snowflake oferece suporte ao uso de aspas simples para delimitar as constantes de cadeias de caracteres.
Por exemplo:
A cadeia de caracteres é interpretada como um valor DATE, TIME ou TIMESTAMP com base no formato de entrada para o tipo de dados, conforme definido pelos seguintes parâmetros:
- DATE:
- TIME:
- TIMESTAMP:
Por exemplo, para inserir uma data específica em uma coluna em uma tabela:
Constantes de intervalo¶
É possível usar constantes de intervalo para adicionar ou subtrair um período de tempo para ou de uma data, horário ou carimbo de data/hora. As constantes de intervalo são implementadas usando a palavra-chave INTERVAL, que tem a seguinte sintaxe:
Como em todas as constantes de cadeias de caracteres, o Snowflake exige aspas simples para delimitar as constantes de intervalo.
Nota
As constantes de intervalo são compatíveis com aritmética de data e hora, mas não são compatíveis com armazenamento de intervalo como tipo de coluna. Para armazenar valores de intervalo em uma coluna, você pode usar tipos de dados de intervalo.
A palavra-chave INTERVAL permite um ou mais números inteiros e, opcionalmente, uma ou mais partes de data ou hora. Por exemplo:
INTERVAL '1 year'representa um ano.INTERVAL '4 years, 5 months, 3 hours'representa quatro anos, cinco meses e três horas.
Se uma parte da data ou hora não for especificada, o intervalo representa segundos (por exemplo, INTERVAL '2' é o mesmo que INTERVAL '2 seconds'). Note que isto é diferente da unidade de tempo padrão para realizar a aritmética de datas. Para obter mais detalhes, consulte Aritmética simples para datas.
Para obter a lista de partes de data e hora compatíveis, consulte Partes de data e hora compatíveis com intervalos.
Nota
A ordem dos incrementos de intervalo é importante. Os incrementos são adicionados ou subtraídos na ordem listada. Por exemplo:
INTERVAL '1 year, 1 day'primeiro adiciona ou subtrai um ano e depois um dia.INTERVAL '1 day, 1 year'primeiro adiciona ou subtrai um dia e depois um ano.
Diferenças de ordenação podem afetar cálculos influenciados por eventos do calendário, como anos bissextos:
INTERVAL não é um tipo de dados (ou seja, não é possível definir uma coluna de tabela como sendo do tipo de dados INTERVAL). Os intervalos só podem ser usados em aritmética de data, hora e carimbo de data/hora.
Você não pode usar um intervalo com uma variável SQL. Por exemplo, a consulta a seguir retorna um erro:
Partes de data e hora com suporte para intervalos¶
A palavra-chave INTERVAL permite as seguintes partes de data e hora como argumentos (sem diferenciação de maiúsculas e minúsculas):
Parte de data ou hora |
Abreviações/variações |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Exemplos de intervalos¶
Adicionar um intervalo de um ano a uma data específica:
Adicione um intervalo de 3 horas e 18 minutos a um horário específico:
Adicionar um intervalo complexo à saída da função CURRENT_TIMESTAMP:
A seguir, um exemplo de saída. A saída é diferente quando o carimbo de data/hora atual é diferente.
Adicionar um intervalo complexo com notação abreviada de parte de data/hora a uma data específica:
Consulte uma tabela de informações de funcionários e retorne os nomes dos funcionários contratados nos últimos dois anos e três meses:
Filtre uma coluna TIMESTAMP nomeada ts de uma tabela nomeada t1 e adicione quatro segundos a cada valor retornado:
Aritmética simples para datas¶
Além de usar constantes de intervalo para adicionar e subtrair datas, horas e carimbos de data/hora, você também pode adicionar dias a e subtrair dias de valores DATE, na forma de { + | - } integer, em que integer especifica o número de dias a serem adicionados ou subtraídos.
Nota
Os valores TIME e TIMESTAMP ainda não oferecem suporte à aritmética simples.
Exemplos de aritmética de datas¶
Adicione um dia a uma data específica:
Subtraia quatro dias de uma data específica:
Consultar uma tabela chamada employees e retornar os nomes das pessoas que deixaram a empresa, mas foram empregadas por mais de 365 dias:
SELECT name FROM employees WHERE end_date > start_date + 365;