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.
Como afiliado, podemos receber comissão por compras qualificadas, sem custo extra para você.
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ô
Casio Relógio digital masculino W59-1V clássico preto, Preto, OneSize, Relógio de quartzo, digital

Perguntas Frequentes (FAQ)
A função mais comum é a DAYOFWEEK()
, que retorna um número representando o dia da semana, onde 1 é domingo e 7 é sábado.
Você pode usar a função DATE_FORMAT(data, '%W')
para obter o nome completo do dia da semana, como “segunda-feira”.
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.