#Funções de Data e Hora

#Funções de Data

#retorna data atual
SELECT CURDATE();

#para formatar a data
SELECT DATE_FORMAT(CURDATE(), '%d/%m/%Y');

#seleciona todos os funcionários da departamento de vendas. Formata as datas
SELECT funcionario.nome, cargo, departamento.nome, DATE_FORMAT(data_contratacao, '%d/%m/%Y') AS 'Data de Contratação'
FROM funcionario JOIN departamento USING(id_departamento)
 WHERE departamento.nome='Vendas';
 
#com a função DAY, MONTH e YEAR removemos o dia, mês e ano
SELECT nome, cargo, DAY(data_contratacao) AS Dia, MONTH(data_contratacao) AS Mes 
FROM funcionario WHERE YEAR(data_contratacao)=2001;

#seleciona os pedidos de 2016 e calcula a data de entrega (10 dias após data compra)
SELECT id_pedido, nome, data, DATE_ADD(data, INTERVAL 10 DAY) AS 'Data de Entrega', total 
FROM pedido JOIN cliente USING(id_cliente) WHERE YEAR(data)='2016' ORDER BY data; 

#date_diff calcula a diferença em dias entre duas datas
#seleciona os funcionarios com mais de 15 anos de trabalho
SELECT id_funcionario, nome, FORMAT(DATEDIFF(CURDATE(), data_contratacao)/365, 1) AS 'Tempo'
 FROM funcionario WHERE DATEDIFF(CURDATE(), data_contratacao)/365>15 ORDER BY nome;

#dayofweek retorna o dia da semana de uma data (1=domingo, 2=segunda...)
#selecionamos todos os pedidos feitos em 2017 na quarta feira
SELECT id_pedido, data, nome, total FROM pedido JOIN cliente USING(id_cliente)
 WHERE YEAR(data)='2017' AND MONTH(data)='02' AND DAYOFWEEK(data)=4;

# dayofyear retorna o dia do ano
SELECT DAYOFYEAR(‘2017-02-03’);

#FUNÇÕES DE MANIPULAÇÃO DE HORA

#curtime retorna a hora atual
SELECT CURTIME();

#funções para remover hora, minuto e segundo de um horário
SELECT HOUR(CURTIME()) AS Hora, MINUTE(CURTIME()) AS Minutos, SECOND(CURTIME()) AS Segundo;

#addtime serve para somar valores em um horario
SELECT ADDTIME("01:00:00.999999", "02:00:00.999998");

#subtime subtrai dois horários
SELECT SUBTIME("23:01:01","02:00:00");

#timediff calcula a diferença entre dois horarios
SELECT TIMEDIFF('23:01:01', '20:01:01');

#FUNÇÕES DE MANIPULAÇÃO DE STRING

#função concat faz concatenação de colunas
#nesse caso concatenamos o nome, com string salário e o campo salario_fixo 
SELECT CONCAT(nome, ' - Salário: ', salario_fixo) 
FROM funcionario WHERE salario_fixo>2000;

#concat_ws serve para concatenar usando algum separador específico
SELECT CONCAT_WS('-','My','SQL');

#conv faz a conversão de bases decimais
#no exemplo convertermos 45, na base 10, para base 16
SELECT CONV(45,10,16);

#converter campos para maiúsculo ou minusculo
SELECT LOWER(nome) AS 'Nome em Minusculo', UPPER(nome) 
AS 'Nome em Maiusculo' FROM funcionario;

#substring serve para pegar parte do texto de um campo
#a partir do caractere 4 pega nove caracteres
SELECT SUBSTRING(nome, 4, 9) from cliente;


