Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Ter Nov 29, 2022 10:33 pm Assunto: Obter o número da semana do ano |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 30, 2022 12:09 pm Assunto: |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 1:46 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 30, 2022 3:45 pm Assunto: |
|
|
Quais resultados o excel retorna do dia 01/01/2022 a 07/01/2022? |
|
Voltar ao Topo |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 4:17 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 30, 2022 4:48 pm Assunto: |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 4:54 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 30, 2022 5:03 pm Assunto: |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 5:05 pm Assunto: |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 5:08 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qua Nov 30, 2022 5:45 pm Assunto: |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 8:37 pm Assunto: [Resolvido] |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qua Nov 30, 2022 9:32 pm Assunto: |
|
|
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 |
|
|
imex Moderador
Registrado: Sexta-Feira, 7 de Janeiro de 2011 Mensagens: 11666
|
Enviada: Qui Dez 01, 2022 9:41 am Assunto: |
|
|
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 |
|
|
lucasc Membro Junior
Registrado: Quinta-Feira, 10 de Mai de 2007 Mensagens: 305
|
Enviada: Qui Dez 01, 2022 10:16 am Assunto: |
|
|
Entendido Imex, agradeço muito pela sua ajuda. |
|
Voltar ao Topo |
|
|
|