ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Obter o número da semana do ano
Ir à página 1, 2  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Ter Nov 29, 2022 10:33 pm    Assunto: Obter o número da semana do ano Responder com Citação

Prezados,

O select a seguir retorna o número da semana do ano (Bando Firebird).

Código:


SELECT (EXTRACT(YEARDAY FROM CURRENT_DATE) - EXTRACT(WEEKDAY FROM CURRENT_DATE-1) + 7) / 7 FROM RDB$DATABASE


Tenho um processo, que pela regra de negócio, a semana incia na sexta, e termina na quinta.

A query acima não resolve esse problema.

O Excel tem uma fórmula que faz exatamente como eu preciso, a função NÚMSEMANA(data;15)

Nessa função, eu passo como parâmetro a data, e o tipo de dia em que a semana se inicia (no meu caso, sexta-feira).

[url]
https://support.microsoft.com/pt-br/office/n%C3%BAmsemana-fun%C3%A7%C3%A3o-n%C3%BAmsemana-e5c43a03-b4ab-426c-b411-b18c13c75340
[/url]

Gostaria de saber se alguém poderia me auxiliar na contrução de uma quary que funcione como é no Excel.

Att.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 30, 2022 12:09 pm    Assunto: Responder com Citação

Bom dia,

Segue sugestão para testes:

Código:
select
    (EXTRACT(YEARDAY FROM CURRENT_DATE) -
     case when EXTRACT(WEEKDAY FROM CURRENT_DATE) < 5
         then 2 + EXTRACT(WEEKDAY FROM CURRENT_DATE)
         else EXTRACT(WEEKDAY FROM CURRENT_DATE) - 5
     end + 7) / 7
from rdb$database


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 1:46 pm    Assunto: Responder com Citação

Boa tarde Imex,

Agardeço pela atenção e disposição.

Rodei seu script mas não deu certo.

Simulei as seguintes datas:

01/09/2022
02/09/2022
03/09/2022

Resultado pelo Excel:

Código:

01/09/2022   qui   35
02/09/2022   sex   36
03/09/2022   sáb   36


Resultado seu script:

Código:

01/09/2022   qui   34
02/09/2022   sex   35
03/09/2022   sáb   35


Att.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 30, 2022 3:45 pm    Assunto: Responder com Citação

Quais resultados o excel retorna do dia 01/01/2022 a 07/01/2022?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 4:17 pm    Assunto: Responder com Citação

Código:

01/01/2022 sáb   1
02/01/2022 dom  1
03/01/2022 seg   1
04/01/2022 ter    1
05/01/2022 qua   1
06/01/2022 qui    1
07/01/2022 sex   2
08/01/2022 sáb   2
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 30, 2022 4:48 pm    Assunto: Responder com Citação

Só pra confirmar, o resultado desejado para o período de 12 dias de 01/01/2023 a 12/01/2023 é semana 1?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 4:54 pm    Assunto: Responder com Citação

Não Imex, o resultado deve ser o seguinte:

Código:


01/01/2022 sáb   1
02/01/2022 dom 1
03/01/2022 seg   1
04/01/2022 ter   1
05/01/2022 qua   1
06/01/2022 qui   1
07/01/2022 sex   2
08/01/2022 sáb   2
09/01/2022 dom 2
10/01/2022 seg   2
11/01/2022 ter   2
12/01/2022 qua   2
13/01/2022 qui   2
14/01/2022 sex   3


Veja que a cada sexta-feita o número da semana muda.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 30, 2022 5:03 pm    Assunto: Responder com Citação

Para 2023, de 01/01/2023 a 12/01/2023, não 2022.
E confirme também o resultado desejado para 2011, de 01/01/2011 a 13/01/2011.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 5:05 pm    Assunto: Responder com Citação

Desculpe:

Código:

01/01/2023 dom   1
02/01/2023 seg   1
03/01/2023 ter   1
04/01/2023 qua   1
05/01/2023 qui   1
06/01/2023 sex   2
07/01/2023 sáb   2
08/01/2023 dom   2
09/01/2023 seg   2
10/01/2023 ter   2
11/01/2023 qua   2
12/01/2023 qui   2
13/01/2023 sex   3
14/01/2023 sáb   3
15/01/2023 dom   3
16/01/2023 seg   3
17/01/2023 ter   3
18/01/2023 qua   3
19/01/2023 qui   3
20/01/2023 sex   4
21/01/2023 sáb   4
22/01/2023 dom   4
23/01/2023 seg   4
24/01/2023 ter   4
25/01/2023 qua   4
26/01/2023 qui   4
27/01/2023 sex   5
28/01/2023 sáb   5
29/01/2023 dom   5
30/01/2023 seg   5
31/01/2023 ter   5
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 5:08 pm    Assunto: Responder com Citação

Resultado esperado para 2011:

Código:

01/01/2011 sáb   1
02/01/2011 dom 1
03/01/2011 seg   1
04/01/2011 ter   1
05/01/2011 qua   1
06/01/2011 qui   1
07/01/2011 sex   2
08/01/2011 sáb   2
09/01/2011 dom 2
10/01/2011 seg   2
11/01/2011 ter   2
12/01/2011 qua   2
13/01/2011 qui   2
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Nov 30, 2022 5:45 pm    Assunto: Responder com Citação

Segue outra sugestão para testes:

Código:
select
    (EXTRACT(YEARDAY FROM CURRENT_DATE) + 1 -
     case EXTRACT(WEEKDAY FROM CURRENT_DATE)
         when 5 then 0
         when 6 then 1
         else EXTRACT(WEEKDAY FROM CURRENT_DATE) + 2
     end) / 7 + 1
from rdb$database


Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 8:37 pm    Assunto: [Resolvido] Responder com Citação

Imex, muito obrigado pela sua ajuda e disposção.

É exatamente o que eu precisava, rodei um ano de datas, comparei com o método do excel, e está exatamente igual.

Parabéns pela sua capacidade de abstração.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qua Nov 30, 2022 9:32 pm    Assunto: Responder com Citação

Imex,

Apenas para fins didáticos, poderia explicar o conceito utilizado?

O método usado funciona perfeitamente, tomando como base o início da semana numa sexta-feira, e se fosse outro dia, o que mudaria?

Att.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qui Dez 01, 2022 9:41 am    Assunto: Responder com Citação

Que bom que funcionou.
A base do método é a que você postou, pegando o dia do ano (soma 1 porque o dia 01/jan é o dia 0) e divide por 7.
Para considerar o início na sexta-feira foi adicionado o Case para voltar a data até a sexta-feira anterior antes da divisão por 7. Para outro dia da semana seria necessário adaptar esse Case para voltar ao dia da semana em questão.

Espero que ajude
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
lucasc
Membro Junior
Membro Junior


Registrado: Quinta-Feira, 10 de Mai de 2007
Mensagens: 305

MensagemEnviada: Qui Dez 01, 2022 10:16 am    Assunto: Responder com Citação

Entendido Imex, agradeço muito pela sua ajuda.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2  Próximo
Página 1 de 2

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB