Trabalhando com datas no SQL

Trabalhando com datas no SQL

Neste artigo vamos ver como trabalhar com datas utiilzando SQL. Os exemplos a seguir serão nos bancos de dados SQL Server e MySQL.

 

Para retornar a data e hora atual você pode utilizar CURRENT_TIMESTAMP

 

SELECT CURRENT_TIMESTAMP as data_atual;

 

No SQL Server, você pode utilizar a função GETDATE().

 

SELECT GETDATE() as data_atual;

 

Para retornar a data no formato dd/mm/aaaa será necessário usar a função CONVERT para converter uma informação no formato DATE ou DATETIME numa string com o formato de data desejada.

 

SELECT 

CONVERT(varchar(10), getdate(), 103)

 

 

Para os dois bancos de dados, as funções YEAR, MONTH e DAY permitem filtrar de forma fácil campos do tipo DATE ou DATETIME.

YEAR - Permite filtrar por ano.

MONTH - Permite filtrar por mês.

DAY - Permite filtrar por dia.

 

YEAR()

SELECT coluna1, coluna2

FROM nome_da_tabela

WHERE YEAR(coluna_data) = valor

 

MONTH()

SELECT coluna1, coluna2

FROM nome_da_tabela

WHERE MONTH(coluna_data) = valor

 

DAY()

SELECT coluna1, coluna2

FROM nome_da_tabela

WHERE DAY(coluna_data) = valor

 

Para praticar, vamos criar uma tabela e carregar com alguns dados para testes.

 

MySQL

CREATE TABLE funcionarios (

    codigo INT NOT NULL AUTO_INCREMENT,

    nome VARCHAR (255),

    email VARCHAR (255),

    telefone VARCHAR (255),

    cidade VARCHAR (255),

    departamento VARCHAR (255),

    salario NUMERIC (10,2),

    data_admissao DATE

);

 

SQL Server

CREATE TABLE funcionarios (

    codigo IDENTITY(1,1) PRIMARY KEY,

    nome VARCHAR (255),

    email VARCHAR (255),

    telefone VARCHAR (255),

    cidade VARCHAR (255),

    departamento VARCHAR (255),

    salario NUMERIC (10,2),

    data_admissao DATE

);

 

 

Os dados que vamos utilizar são os seguintes:

 

INSERT INTO funcionarios (nome, email, telefone, cidade, departamento, salario, data_admissao) VALUES ('Fulano da Silva', 'fulano@teste.com.br', '(11) 1234-5678','SAO PAULO', 'TI', 2517.23, '2020-01-15');

INSERT INTO funcionarios (nome, email, telefone, cidade, departamento, salario, data_admissao) VALUES ('Beltrano Santos', 'beltrano@teste.com.br', '(11) 1234-5678','JUNDIAI', 'MARKETING', 1817.15, '2020-07-15');

INSERT INTO funcionarios (nome, email, telefone, cidade, departamento, salario, data_admissao) VALUES ('Siclano Souza', 'siclano@teste.com.br', '(11) 1234-5678','DIADEMA', 'TI', 3700.15, '2020-05-15');

INSERT INTO funcionarios (nome, email, telefone, cidade, departamento, salario, data_admissao) VALUES ('Euripedes Silva', 'euripedes@teste.com.br', '(11) 1234-5678','SANTOS', 'MARKETING', 1200.15, '2020-03-18');

INSERT INTO funcionarios (nome, email, telefone, cidade, departamento, salario, data_admissao) VALUES ('Xerxes Santos', 'xerxes@teste.com.br', '(11) 1234-5678','SAO PAULO', 'TI', 4200.00, '2019-11-19');

INSERT INTO funcionarios (nome, email, telefone, cidade, departamento, salario, data_admissao) VALUES ( 'Trajano Souza','trajano@teste.com.br', '(11) 1234-5678','CAMPINAS', 'COMERCIAL', 5000.00, '2019-12-02');

 

Agora que já inserimos informações, vamos trabalhar com as opções de filtragem por data.

 

Para filtrar um intervalo de datas, você pode utilizar o BETWEEN. Exemplo:

SELECT * FROM funcionarios 

WHERE data_admissao 

BETWEEN '2020-01-01' AND '2020-01-31';

 

No exemplo acima, a data foi informada no formato americano (ano-mês-dia). Utilizando as funções de data, podemos chegar no mesmo resultado desta forma:

 

SELECT * FROM funcionarios 

WHERE YEAR(data_admissao) = 2020 

AND MONTH(data_admissao) = 1;

 

Se for necessário filtrar vários meses dentro do mesmo ano, podemos usar o operador "IN".

 

SELECT * FROM funcionarios 

WHERE year(data_admissao) = 2020 

AND

MONTH(data_admissao) in (1,2,3,4,5);

 

Para listar os funcionários que foram admitidos num determinado dia, podemos utilizar a função DAY

 

SELECT * FROM funcionarios 

WHERE DAY(data_admissao) = 18;

 

Estas funções também podem ser utilizadas como parte dos resultados. No exemplo a seguir, vamos retornar o nome dos funcionários e o dia, mês e ano em campos separados.

 

SELECT nome,

DAY(data_admissao) as dia,

MONTH(data_admissao) as mes,

YEAR(data_admissao) as ano

FROM funcionarios 

 

Para calcular a diferença entre duas datas, podemos utilizar a função DATEDIFF. Vamos ver um exemplo de como utilizar no SQL Server.

 

SELECT 

DATEDIFF (intervalo, data_inicial, data_final) 

FROM minha_tabela;

 

O retorno desta função é o indicador que foi definido como intervalo entre as datas informadas

 

As opções de intervalo são as seguintes:

Year- ano

Quarter,- quadrimestre

Month - mês

Dayofyear – dia do ano

Day – dia.

Week – semana.

Weekday – dia da semana.

Hour - hora

Minute - minuto

Second - segundos

 

O retorno desta função sempre será um número inteiro.

 

No exemplo a seguir, vamos calcular a diferença de dias entre o primeiro e o último funcionário contratado do departamento de TI.

 

Para fazer isso, vamos precisar pegar a primeira e a última data deste departamento, isso pode ser obtido utilizando respectivamente as funções de agregação MIN e MAX

 

SELECT 

DATEDIFF (day, MIN(data_admissao), MAX(data_admissao)) as diferenca_dias

FROM funcionários

WHERE departamento = ‘TI’;

 

 

No MySQL também existe uma função DATEDIFF, mas o seu comportamento é diferente.

 

SELECT 

DATEDIFF (data_final, data_inicial) 

FROM minha_tabela;

 

O retorno desta função vai ser o número de dias entre as datas informadas

 

No exemplo a seguir, vamos calcular a diferença de dias entre o primeiro e o último funcionário contratado do departamento de TI. Para fazer isso, vamos seguir o mesmo exemplo que foi utilizado no SQL Server.

 

SELECT 

DATEDIFF (MAX(data_admissao), MIN(data_admissao)) as diferenca_dias

FROM funcionários

WHERE departamento = ‘TI’;

 

Encerramento

Neste artigo você viu várias formas de trabalhar com datas no SQL.

Para quem trabalha como datas, é comum existir a necessidade de trabalhar com horas.

No artigo a seguir eu mostro como isso pode ser feito no SQL

Calcular a diferença entre horas utilizando SQL

 

Outros conteudos que podem ser de seu interesse

SQL vs Pandas - ,Média, mediana e quartis
14/04/2024SQL

SQL vs Pandas - ,Média, mediana e quartis

Veja exemplos básicos de estatística descritiva utilizando Pandas e SQL

Saiba mais...
Como agrupar vários registros em uma única coluna com SQL
26/06/2022SQL

Como agrupar vários registros em uma única coluna com SQL

Veja como agrupar várias linhas em uma única coluna com SQL

Saiba mais...

Conteúdo sobre banco de dados sem complicação!