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é +