Como comparar meses en sql

Um dos problemas mais habituais em programação SQL é pedir dados que aconteçam no intervalo de duas datas. O tipo de dados dos campos de data/hora variam conforme o SGBD (DATE, TIME, DATETIME, DATETIME2, SMALLDATETIME, etc.), mas o problema descrito em baixo é semelhante em todos.

Problema: Necessito dos registos cujo campo CampoData está no intervalo 2016-01-01 (inclusive) a 2016-12-31 (inclusive).

Solução 1:

SELECT [...] FROM [...] WHERE YEAR(CampoData) = 2016;

Funciona, mas…

Esta é uma forma fácil (dado tratar-se do ano 2016 inteiro), mas infelizmente a maioria dos intervalos não correspondem a anos de calendário (ou a meses, acrescentando o MONTH() à condição, por exemplo). Temos então que encontrar uma solução melhor para qualquer intervalo de datas.

Solução 2:

SELECT [...] FROM [...] WHERE CampoData BETWEEN '2016-01-01' AND '2016-12-31';

Não funciona como queremos…

Será que esta funciona? Bem, na maioria dos casos não. Porquê? Primeiro temos que perceber como funciona exactamente o BETWEEN:

SELECT [...] FROM [...] WHERE Quantidade BETWEEN 10 AND 20;

Este exemplo retorna valores sempre que a Quantidade for “maior ou igual a 10” e “menor ou igual a 20”, o que para inteiros funciona como esperado. Mas se for com datas? Voltando ao exemplo anterior, pedir “maior ou igual a 2016-01-01” é o que precisamos, mas pedir “menor ou igual a 2016-12-31” dá um efeito inesperado.

Quando registamos uma data (e.g. 2016-12-31) esta terá sempre que ter associada uma determinada hora. Se não for especificada, corresponde a 00:00:00 (meia noite). Ora, ao indicar “menor ou igual a 2016-12-31”, estamos na realidade a dizer para incluir o segundo 00:00:00 do dia 31, mas excluir os outros 23h59m59s desse dia. Assim, o BETWEEN não serve para datas e esta não é uma solução válida.

Solução 3:

SELECT [...] FROM [...] WHERE CampoData >= '2016 -01-01' AND CampoData < '2017-01-01';

— Solução geral!

E finalmente temos a resposta correcta. Atenção ao “maior e igual” à primeira data, e ao “menor” (mas não igual) ao dia seguinte à segunda data. Assim, queremos tudo o que aconteceu “até” (mas não incluindo) o dia 2017-0101 00:00:00, ou seja, tudo até (inclusive) 2016-12-31 23:59:59,999999(9)…

Compatibilidade:

  • SGBD: SQL Server; Oracle; MySQL/MariaDB; Outros;
  • Nota 1: Em alguns SGBD o BETWEEN tem comportamento diferente do indicado, pelo que deve ser evitado;
  • Nota 2: A representação das datas nas queries (neste caso ‘AAAA-MM-DD’) poderá variar conforme a configuração regional do SGBD, e para efeitos de exemplo assume conversão implícita, que nem sempre funciona.

Documentação:


A função DATEDIFF () compara duas datas e retorna a diferença. A função DATEDIFF () é usada especificamente para medir a diferença entre duas datas em anos, meses, semanas e assim por diante.

Esta função pode ou não retornar a data original. Ele retorna o número de vezes que cruzou os limites da parte da data definida entre as datas de início e término (como um valor inteiro assinado).

Sintaxe:

DATEDIFF (date_part, start_date_value1, end_date_value2);

Date_part nada mais é do que um mês, ano ou dia. Nessa diferença formal, você descobriria que result.start_date_value1 é o valor da data de início e end_date_value2 é o valor da data de término de uma descoberta.

Código:

SELECT DATEDIFF (mês,’2011-03-07′,’2021-06-24′);

Como comparar meses en sql

Neste exemplo acima, você pode encontrar o número de meses entre a data de início e término. Pelas entradas que você obteve, há 123 meses entre a data de 03/07/2011 e 24/03/2021.

Você pode até encontrar o número de horas, minutos, segundos e assim por diante em termos de detalhes entre as duas datas, com a ajuda de DATEDIFF ().

Existem muitos argumentos associados à função DATEDIFF em SQL. Eles são mencionados abaixo.

DATEDIFF () Argumentos:

A parte da data é a parte da data que você deseja comparar com a data de término e a data de início, como um ano, um quinto, um mês ou uma semana. Na tabela abaixo, você encontrará os bits de data válidos.

As datas a serem comparadas são a data de início e a data de término. Eles precisam ser convertidos para os valores DATE, DATETIME, DATETIMEOFFSET, DATETIME2, SMALLATETIME ou TIME.

Existem quase três argumentos na função DATEDIFF () em SQL.

  • DATEPART
  • A partir de DATE
  • Término em DATE

Argumento DATE inicial/final DATE

A DATA inicial e a DATA final são comuns para seguir o formato para especificar os valores. Por exemplo, a data deve ser AAAA-MM-DD Seg: MIN: Hora.

E o formato dessas datas pode ser:

  • tempo
  • data
  • datetime
  • datetime2
  • datetimeoffset
  • smalldatetime

PARTE DA DATA como argumento:

O principal argumento na função DATEDIFF é relativo a DATEPART.

DATEPART

Abreviatura

ano

aa, aaaa

quarto

qq, q

mês

mm, m

dia do ano

dy, y

dia

dd, d

semana

wk, ww

hora

hh

minuto

mi, n

segundo

ss, s

milissegundo

ms

microssegundo

mcs

nanossegundo

ns

A função DATEDIFF () retorna um valor inteiro que representa a diferença entre a data de início e a data de término, com a parte da data como unidade. Se o resultado estiver fora do intervalo do número inteiro (-2.147.483.647), a função DATEDIFF () retornará um erro. Aqui, a função DATEDIFF BIG () deve ser usada em seu lugar.

Duas maneiras de usar a função DATEDIFF () no SQL:

O primeiro é encontrar as diferenças entre os dois valores de data. Nesta função, você deve comparar os dois dados de entrada como data e valor.

Outro método é encontrar as diferenças entre as duas colunas de dados dos atributos de tabela especificados. Ele pode retornar o resultado na tabela de dados.

Uso de DATEDIFF () para encontrar as diferenças entre dois valores de data.

Nesse tipo, a função DATEDIFF () é usada para encontrar o número de dias ou anos ou qualquer outra contagem entre os dois valores DATE. Isso indica a data de início e término da consulta.

Exemplo:

Código:

SELECT DATEDIFF (ano,’2000/05/8′,’2018/05/28′) AS no_of_years;

Como comparar meses en sql

Neste exemplo acima, você calculou o número de anos entre as duas entradas de datas fornecidas. Então, o resultado será nomeado como no_of_year.

Código:

SELECT DATEDIFF (aaaa,’2011/11/18′,’2016/03/2′) AS total_Year;

Como comparar meses en sql

Código:

SELECT DATEDIFF (aa,’2010/05/10′,’2010/10/21′) AS No_of_year;

Como comparar meses en sql

Todas as declarações acima são usadas para encontrar os anos entre as duas datas. Isso foi iniciado pelo usuário. E você também salvou o resultado em um nome específico de dados.

Código:

SELECT DATEDIFF (mês,’2016/05/15′,’2009/06/13′) AS Meses;

Como comparar meses en sql

Código:

SELECIONE DATEDIFF (dia,’2021/01/01′,’2019/06/1′) AS No_Of_days;

Como comparar meses en sql

Código:

SELECT DATEDIFF (hora,’2016/06/30 12:00′,’2018/10/18 12:45′) AS No_of_hours;

Como comparar meses en sql

Código:

SELECT DATEDIFF (minuto,’2015/04/02 09:00′,’2015/04/08 11:55′) AS No_of_minutes;

Como comparar meses en sql

Uso de DATEDIFF () para encontrar as diferenças entre os valores das colunas de duas tabelas:

A função DATEDIFF () é usada no exemplo a seguir para comparar a data de entrega solicitada com a data de envio em dias. Isso determina se o pedido está no prazo ou atrasado.

Para criar a tabela, use emp_data_table para armazenar os detalhes do funcionário. Isso é emp_no, emp_name e a data de adesão como st_date e a data de demissão é en_date.

Esta tabela ajuda você a descobrir o número de anos de trabalho na mesma organização.

Como comparar meses en sql

A tabela foi criada com sucesso. Em seguida, insira os registros na tabela com os tipos de entrada apropriados. Quase insira os cinco e os registros acima em uma tabela.

Código:

insira em valores emp_data_table (101,’mann’,’2001-01-01′,’2020-03-19′)

insira em valores emp_data_table (102,’barpara’,’2011-11-19′,’2021-03-10′)

insira em valores emp_data_table (103,’ven’,’2015-06-06′,’2019-11-11′)

insira em valores emp_data_table (104,’john’,’2015-09-19′,’2020-03-11′)

insira em valores emp_data_table (105,’ann’,’2001-01-01′,’2020-03-19′)

selecione * de emp_data_table

Como comparar meses en sql

Em seguida, encontre o número de experiência de trabalho na tabela a seguir. Os dados foram calculados com a ajuda de uma função DATEDIFF () em SQL.

SELECIONE DATEDIFF (aa, st_date, en_date) AS Total_year_of_Experience de emp_data_table;

O resultado é exibir o número de anos de experiência de cada funcionário da tabela mencionada acima.

Resultado

Total_Year_of_Experience

19

10

4

5

19

Como comparar meses en sql

Da mesma forma, você pode encontrar facilmente o número de meses e minutos ou horas e assim por diante. A seguir, abaixo está o código calculado para o número de dias entre as duas datas de entrada fornecidas.

Código:

SELECIONE DATEDIFF (DAY, st_date, en_date) AS Total_year_of_Experience FROM emp_data_table;

Como comparar meses en sql

Mais exemplos:

Como comparar meses en sql

Como comparar meses en sql

Ganhe experiência nas mais recentes ferramentas e técnicas de análise de negócios com o Programa de certificação de analista de negócios . Inscreva-se agora!

Conclusão:

O recurso DATEDIFF SQL Server calcula a diferença entre dois valores de data e hora em unidades de um elemento específico (ou seja, ano, mês, dia), mas apenas para esse elemento e elementos superiores na hierarquia de tempo-não para elementos inferiores.

Você pode usar o Dia do ano (“y”) ou o Dia do mês (“m”) para medir o número de dias entre a data1 e a data2 (“d”). DateDiff retorna o número de semanas entre as duas datas quando o intervalo é Dia da semana (“w”). DateDiff conta o número de segundas-feiras antes da data2 se a data1 for uma segunda-feira.

Finalmente, a partir dos exemplos acima, você pode entender o processo e os usos de uma função DATEDIFF () em SQL. É usado para encontrar a diferença entre os dois dias. Pode ser calculado a partir de dois dias, como duas entradas ou duas colunas.

Ganhe experiência em linguagem de programação SQL ingressando em nossa Certificação de SQL do Simplilearn Curso de treinamento . Este curso de certificação em SQL ensinará tudo o que você precisa saber sobre bancos de dados SQL e como integrá-los aos seus aplicativos. Aprenda como organizar adequadamente seu banco de dados, escrever instruções e cláusulas SQL bem-sucedidas e dimensionar seu banco de dados SQL. Este curso cobre noções básicas de SQL, todas as ferramentas de consulta e comandos SQL relacionados, um certificado de conclusão do curso reconhecido pelo setor e acesso vitalício ao aprendizado individualizado.

Apesar do SQL ser uma linguagem de programação antiga, ainda é muito útil hoje, já que empresas ao redor do mundo coletam grandes quantidades de dados. Dominar SQL, uma das habilidades de engenharia mais exigidas, expandirá seus horizontes.

Gerenciamento de banco de dados e relacional, ferramentas de consulta e comandos SQL, funções agregadas, grupo por cláusula, tabelas e junções, subconsultas, manipulação de dados, controle de transações, visualizações e procedimentos são apenas algumas das habilidades abordadas.

Comece a aprender gratuitamente as habilidades mais exigidas de hoje. Este curso se concentra no desenvolvimento de fortes habilidades essenciais que o ajudarão a ter sucesso em sua carreira. Você será ensinado por especialistas da região. Obtenha acesso a mais de 300 habilidades prontas para o trabalho nos campos mais quentes de hoje. Enquanto trabalha ou estuda, aprenda em qualquer lugar, em qualquer laptop. Existem guias gratuitos disponíveis em uma variedade de planos de carreira, dicas de entrevista, salários e muito mais.

Tem alguma pergunta para nós? Deixe-os na seção de comentários deste artigo e nossos especialistas entrarão em contato com você sobre eles, o mais rápido possível!

Source link