sábado, março 21, 2009

Retornar a data do primeiro e do último dia da semana

HI,

Estou trabalhando em uma rotina para enviar a rota da semana para os vendedores. Minha idéia foi de enviar todos os registros da semana, e não apenas do dia atual até o último dia da semana.

Então como fazer para enviar os registros que estão entre Domingo e Sábado ?

Abrir o delphi e fiz um algotimo para pegar a data do primeiro dia (Domingo) da semana e do último (Sábado) dia.

Ficou assim:

procedure TForm1.BitBtn1Click(Sender: TObject);
Var DiaSemanaHoje : Byte;
begin
DiaSemanaHoje := DayOfWeek(Date());

Edit2.Text := DateToStr(Date() - (DiaSemanaHoje - 1));
Edit3.Text := DateToStr(Date() + (7 - DiaSemanaHoje));
end;

Preciso utiliza isso no Oracle. Então lá vou eu para a home page do banco de dados (utilizo o oracle express aqui no note).

Peguei o exemplo que se encontra aqui no blog para pegar o dia da semana e bolei essa Sql:

select SYSDATE AS HOJE,
SYSDATE - (to_char(SYSDATE, 'D') - 1) AS DOMINGO,
SYSDATE + (7 - to_char(SYSDATE, 'D')) AS SABADO
from dual

Pronto. Já posso trabalhar com essa lógica no Where.

Mas aí achei um jeito mais simples, hehehe.

Pegar pelo dia da semana no ano.

Então o Where vai ficar assim (Delphi):

Sql.Add('Where to_char(SYSDATE, ''WW'') = ' + IntToStr(WeekOfTheYear(Date)));

Espero que possa ajudar mais alguém com isso.


[editando]

Mostrei esse código a um amigo que é DBA e ele me mostrou outra maneira de pegar as datas do primeiro e último dia da semana utilizando a função do NEXT_DAY do Oracle.

select sysdate AS HOJE ,
TRUNC(next_day(sysdate,'MONDAY')-8) as DOMINGO,
TRUNC(next_day(sysdate,'SATURDAY')) as SABADO
from dual

Acabei utilizando essa lógina no meu Where. É que pegando a semana do Ano deu bug, hehehe. Não retornou a Segunda e a Terça.

Where TRUNC(Data) BetWeen TRUNC(next_day(sysdate,'MONDAY')-8) and TRUNC(next_day(sysdate,'SATURDAY'))

Esse TRUNC é para retornar a data sem a parte da hora.

[/editando]

Até +

Um comentário:

Geovanne disse...

Olá amigo. Eu vi que você desenvolveu um jogo freeware chamado "Jogo da Senha",e eu e meu grupo estamos desenvolvendo este jogo, só que na placa 8051, em Assembly. Somos estudantes da UNESP de Rio Claro. Gostaria de saber se há como você escrever para gente no email geovanneb@gmail.com para que voce nos ajude no que diz respeito a algoritmos, etc. Ficariamos muito gratos se voce nos ajudasse. Desde já obrigado