dia da semana sql: como extrair, formatar e automatizar resultados com precisão

dia da semana sql: como extrair, formatar e automatizar resultados com precisão

Como especialista em bancos de dados SQL com mais de 15 anos de experiência, posso afirmar que saber extrair corretamente o dia da semana de uma data é essencial para criar relatórios inteligentes, análises de comportamento e rotinas automatizadas de negócios.

Entendendo a importância do dia da semana em SQL

Antes de tudo, por que trabalhar com o dia da semana em SQL?

A princípio, o dia da semana é mais do que apenas um dado de calendário. Ele é um vetor de decisões. Afinal, empresas analisam comportamento de clientes por dias úteis, finais de semana, horários de pico e sazonalidades. Nesse sentido, extrair corretamente o dia da semana de um campo DATE ou DATETIME permite cruzar dados com lógica real de negócio.

Acima de tudo, onde usamos isso na prática?

  • Geração de relatórios semanais automatizados
  • Dashboards com comportamento por dia
  • Comparação entre dias úteis e finais de semana
  • Otimização de campanhas baseadas em comportamento

Funções nativas para obter o dia da semana em SQL

Em primeiro lugar, conheça a função WEEKDAY()

No MySQL, a função WEEKDAY() retorna um número de 0 a 6, sendo segunda-feira = 0 e domingo = 6. Exemplo:

sqlCopiarEditarSELECT WEEKDAY('2025-05-19'); -- retorna 0 (segunda-feira)

Contudo, e se for no SQL Server?

Nesse caso, usamos a função DATENAME ou DATEPART. Para o nome do dia:

sqlCopiarEditarSELECT DATENAME(WEEKDAY, '2025-05-19'); -- retorna 'Monday'

Ou para o número do dia da semana:

sqlCopiarEditarSELECT DATEPART(WEEKDAY, '2025-05-19'); -- retorno depende do SET DATEFIRST

Bem como no PostgreSQL com EXTRACT

sqlCopiarEditarSELECT EXTRACT(DOW FROM DATE '2025-05-19'); -- retorna 1 (segunda-feira)

Importante: no PostgreSQL, domingo é 0 e sábado é 6.

Ajustando o primeiro dia da semana conforme o contexto

Primordialmente, entenda o uso do SET DATEFIRST

No SQL Server, SET DATEFIRST define qual será o dia 1 da semana. Exemplo:

sqlCopiarEditarSET DATEFIRST 1; -- define segunda-feira como início da semana
SELECT DATEPART(WEEKDAY, '2025-05-19'); -- agora retorna 1

Ou seja, configure corretamente para ter previsibilidade

Isso evita erros em relatórios e comparações entre ambientes diferentes.

Formatando a saída do dia da semana em SQL

Sobretudo, como obter o nome completo do dia?

  • SQL Server: DATENAME(WEEKDAY, campo_data)
  • PostgreSQL: TO_CHAR(campo_data, 'Day')
  • MySQL: DAYNAME(campo_data)

Quer só as três letras?

Use:

sqlCopiarEditar-- PostgreSQL
SELECT TO_CHAR(CURRENT_DATE, 'Dy'); -- Ex: Mon

-- MySQL
SELECT DATE_FORMAT(NOW(), '%a'); -- Ex: Mon

Além disso, padronize para português

Em ambientes que retornam nomes em inglês, uma dica é usar CASE para traduzir manualmente:

sqlCopiarEditarSELECT CASE WEEKDAY(campo_data)
  WHEN 0 THEN 'Segunda'
  WHEN 1 THEN 'Terça'
  WHEN 2 THEN 'Quarta'
  WHEN 3 THEN 'Quinta'
  WHEN 4 THEN 'Sexta'
  WHEN 5 THEN 'Sábado'
  WHEN 6 THEN 'Domingo'
END AS dia_semana
FROM pedidos;

Agrupando por dia da semana em relatórios

Antes de mais nada, agrupe de forma lógica

sqlCopiarEditarSELECT
  CASE WEEKDAY(data_pedido)
    WHEN 0 THEN 'Segunda'
    WHEN 1 THEN 'Terça'
    WHEN 2 THEN 'Quarta'
    WHEN 3 THEN 'Quinta'
    WHEN 4 THEN 'Sexta'
    WHEN 5 THEN 'Sábado'
    WHEN 6 THEN 'Domingo'
  END AS dia_semana,
  COUNT(*) AS total_pedidos
FROM pedidos
GROUP BY dia_semana;

Do mesmo modo, ordene corretamente

Ordenar por nome do dia pode gerar desorganização. Uma dica é criar um campo auxiliar:

sqlCopiarEditarSELECT
  WEEKDAY(data_pedido) AS ordem,
  CASE WEEKDAY(data_pedido)
    WHEN 0 THEN 'Segunda'
    WHEN 1 THEN 'Terça'
    WHEN 2 THEN 'Quarta'
    WHEN 3 THEN 'Quinta'
    WHEN 4 THEN 'Sexta'
    WHEN 5 THEN 'Sábado'
    WHEN 6 THEN 'Domingo'
  END AS dia_semana,
  COUNT(*) AS total
FROM pedidos
GROUP BY ordem, dia_semana
ORDER BY ordem;

Automatizando rotinas com base no dia da semana SQL

Juntamente com tarefas agendadas

Você pode usar a lógica do dia da semana para:

  • Enviar e-mails automáticos
  • Rodar scripts diferentes por dia
  • Aplicar preços diferenciados
sqlCopiarEditarIF DATEPART(WEEKDAY, GETDATE()) = 1
BEGIN
  EXEC AtualizarEstoqueSegunda;
END

Em outras palavras, inteligência aplicada ao dia da semana

Se você ignora o dia, seus dados são planos. Quando inclui essa lógica, eles ganham perspectiva e contexto.

Aplicações práticas: cases com uso de dia da semana em SQL

Case 1: análise de vendas por dia

Uma rede varejista detectou que quartas-feiras têm mais conversões. Criaram campanhas de cashback específicas para esse dia.

Case 2: otimização de e-mails

Uma empresa de SaaS percebeu que aberturas são maiores às terças. Os disparos foram agendados com base em DAYOFWEEK(NOW()).

Case 3: controle de escalas

Em hospitais, o dia da semana define plantões. Consultas SQL extraem o dia da semana para compor a escala diária dos profissionais.

Dicas avançadas para lidar com dia da semana em SQL

Use colunas calculadas

Em data warehouses, vale a pena criar colunas dia_semana, nome_dia, dia_util, etc., para evitar cálculos em tempo real.

Desempenho importa

Funções como WEEKDAY(campo_data) podem impedir uso de índices. Em grandes volumes, crie colunas auxiliares no ETL.

Fique atento ao fuso horário

Em consultas com GETDATE() ou CURRENT_DATE, certifique-se de que o timezone do banco está alinhado com a lógica do seu negócio.

Testando variações: simule datas em SQL

Teste manual com datas específicas

sqlCopiarEditarSELECT
  '2025-05-19' AS data,
  WEEKDAY('2025-05-19') AS num_dia,
  DAYNAME('2025-05-19') AS nome_dia;

Use tabelas de calendário

Crie uma tabela com todas as datas do ano e seus respectivos dias da semana, úteis para cruzamento de dados:

sqlCopiarEditarCREATE TABLE calendario (
  data DATE,
  dia_semana VARCHAR(10)
);

Como manter consistência entre bancos de dados diferentes

Padronize suas consultas

Cada SGBD tem uma lógica diferente para o início da semana. Sempre documente e normalize para manter o padrão nos relatórios.

Adote funções universais via aplicação

Se possível, trate a lógica de dia da semana na camada de aplicação, usando bibliotecas como moment.js, day.js ou date-fns.

Erros comuns ao lidar com dia da semana SQL

Não configurar SET DATEFIRST

Pode causar erros nos relatórios.

Assumir que todos os SGBDs começam no domingo

Nem todos seguem essa convenção. MySQL começa na segunda com WEEKDAY(), mas PostgreSQL começa no domingo com EXTRACT(DOW).

Comparar datas sem considerar o timezone

Pode gerar comportamentos inesperados ao usar NOW() ou GETDATE().

Boas práticas finais

  • Armazene datas no formato padrão ISO (YYYY-MM-DD)
  • Evite cálculos em tempo real em relatórios
  • Crie colunas auxiliares em tabelas fato
  • Sempre valide com SELECT DISTINCT antes de confiar

Minhas Impressões Pessoais

Pessoalmente, acho essencial dominar o uso de dia da semana SQL em qualquer sistema que lide com datas. Ele não só facilita relatórios mais completos, como também possibilita automações úteis e inteligência nos processos. Simples, funcional e muito poderoso quando bem aplicado.


Casio Relógio digital masculino A158WA-1DF de aço inoxidável, Prata, Case size (L× W× H), Clássico, retrô

Amazon.com.br

Casio Relógio digital masculino W59-1V clássico preto, Preto, OneSize, Relógio de quartzo, digital

Amazon.com.br

Relógio Feminino Digital Casio Vintage LA670WA-7DF - Prata

Amazon.com.br
dia da semana sql: como extrair, formatar e automatizar resultados com precisão

Perguntas Frequentes (FAQ)

Qual é a função para obter o dia da semana em SQL?

A função mais comum é a DAYOFWEEK(), que retorna um número representando o dia da semana, onde 1 é domingo e 7 é sábado.

Como faço para formatar o dia da semana em texto?

Você pode usar a função DATE_FORMAT(data, '%W') para obter o nome completo do dia da semana, como “segunda-feira”.

Posso filtrar registros por dia da semana?

Sim, você pode usar a cláusula WHERE junto com DAYOFWEEK(data) para filtrar registros de um dia específico, por exemplo, WHERE DAYOFWEEK(data) = 2 para segundas-feiras.

Prof. Eduardo Henrique Gomes
Prof. Eduardo Henrique Gomes

Apaixonado por tecnologia e análise de gadgets, trazendo reviews e insights para a Web Academy.