Duvida em select com feriádos e fins de semana

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Mensagemem Ter, 08 Abr 2008 9:13 am

Bom dia pessoal.

Tenho uma duvida que acho ser braba preciso fazer um select que traga os domingos e feriados do ano de 2007.

tipo quero pegar todos os registro que aconteceram nos domingos e feriados de 2007 no oracle tenho o campo data que tem as datas normais

pessoal preciso muito dessa ajuda.
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 9:15 am

Brother,
Bom dia.

Pra pegar os sábados e domingos, tranquilo:
Código: Selecionar todos
SELECT TO_CHAR(SYSDATE,'DY') FROM DUAL;

Daí, verifique se é sábado ou domingo neste retorno.
Quanto aos feriados, daí você tem que ter um cadastro em teu sistema, ok?
qualquer coisa, manda ai.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 08 Abr 2008 10:36 am

Trevisolli

vamos por partes. primeiro o domingo

como posso em um select diferenciar tipo só trazer os domingos tipo

SELECT TO_CHAR(u.dtinicio,'DY') FROM usuario u
where u.dtinicio like 'DOM';

tentei assim mas num deu não tem como fazer??
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 10:43 am

Brother, vamos lá!

Pra pegar o sábado ou domingo (atente para a configuração do banco, no caso, aqui, em Inglês, portanto, Sábado = Sat (saturdary) e Domingo = Sun (Sunday), beleza?).
Código: Selecionar todos
DECLARE
  vdia VARCHAR2(03);
BEGIN
  SELECT TO_CHAR (TO_DATE ('13/04/2008', 'dd/mm/rrrr'), 'DY')
    INTO vdia
    FROM DUAL;
  IF vdia IN ('SAT','SUN')
  THEN
     raise_application_error(-20001, 'Data não permitida: '||vdia||' pois não é um dia útil.');
  ELSE
     dbms_output.put_line('Dia válido. '||vdia);   
  END IF; 
END; 


Para fazer os testes ai, troque a data de 13/04/2008, que é um Domingo, pela data que o usuário lhe fornecer, beleza?

Quanto aos feriados, você deve ter um cadastro no teu sistema, portanto, só aplicar a regra acima, quando for Sábado, Domingo ou um Feriado da tua tabela, beleza?

qualquer coisa, manda ai.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 08 Abr 2008 10:51 am

Rapaz que legal mas olha só eu preciso disso pra um select não pra inserir nada em bd tipo o usuário entraria com um rang de datas tipo

u.dtinicio between '&data_INI' and '&data_fim'

ai o select só traz datas relacionadas ao domingo, minhas datas estão em português tipo quando eu fiz:

SELECT TO_CHAR(u.dtinicio,'DY') FROM usuario u

ele retornou
SAB
DOM
QUI

e assim por diante
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 11:01 am

Brother,

Pelo que eu entendi, o usuário vai digitar um Range de Datas e, você deseja mostrar à ele somente dias Úteis, é isso?
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 08 Abr 2008 11:11 am

isso o usuario digita a data Ex.01/01/2007 à 30/04/2007 certo

ai esse select só retorna os Domigos só as datas referente ao domingo
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 11:36 am

Ai brother, faça uns testes:
Em PL/SQL:
Código: Selecionar todos
--Ex.01/01/2007 à 30/04/2007

DECLARE
  vdata_ini DATE := TO_DATE('01/01/2007','dd/mm/rrrr');
  vdata_fim DATE := TO_DATE('30/04/2007','dd/mm/rrrr');
  vdias     PLS_INTEGER := 0;
BEGIN
  vdias := (vdata_fim - vdata_ini);
  FOR x IN 1..vdias
  LOOP
    IF TO_CHAR(vdata_ini, 'DY') = 'SUN' -- No teu caso, 'DOM'
    THEN
      -- Faça algo aqui.
      dbms_output.put_line('Imprime a data na tela (Domingo): ' || TO_CHAR(vdata_ini, 'dd/mm/rrrr'));
    END IF;   
    vdata_ini := vdata_ini + 1;
  END LOOP;
END;


Ou, com SQL também é possível:
Código: Selecionar todos

SELECT *
  FROM sua_tabela
WHERE to_char(dta_atualizacao,'DY') = 'SUN' -- No teu caso, DOM
   AND dta_atualizacao BETWEEN TO_DATE('01/01/2007','dd/mm/rrrr')
                           AND TO_DATE('30/04/2007','dd/mm/rrrr');

qualquer coisa, manda ai.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 08 Abr 2008 11:43 am

Trevisolli
Cara peço desculpas mas sou meio lerdo mesmo vamos por parte onde eu coloco minha tabela nesse trem? rs

tabela = usuario
campo = dtinicio

e nessa parte você colocou

THEN
-- Faça algo aqui.

o que é pra fazer?

Cara fica puto não mas é que eu estou precisando mesmo...

Forte abraço
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 11:46 am

Brother,

Faça com o SQL que adicionei no código anterior.
Tem as duas formas, mas, a de SQL atende melhor tua necessidade, que seria dar um SELECT em uma tabela, retornando apenas os domingos, beleza?
SELECT *
FROM sua_tabela
WHERE to_char(dta_atualizacao,'DY') = 'SUN' -- No teu caso, DOM
AND dta_atualizacao BETWEEN TO_DATE('01/01/2007','dd/mm/rrrr')
AND TO_DATE('30/04/2007','dd/mm/rrrr');

qualquer coisa, manda ai, sem crise.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 08 Abr 2008 11:48 am

Trevisolli


hhuhuhauuahsuahuaa CADE DEU CERTINHO VÉI

fiz o SQL que tava embaixo e eu na pressa nem vi kkkk cara está corretissimo te devo essa mano bigadão.

Deus te page!
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 11:48 am

Trevisolli


hhuhuhauuahsuahuaa CADE DEU CERTINHO VÉI

fiz o SQL que tava embaixo e eu na pressa nem vi kkkk cara está corretissimo te devo essa mano bigadão.
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 11:50 am

Trevisolli


hhuhuhauuahsuahuaa CADE DEU CERTINHO VÉI

fiz o SQL que tava embaixo e eu na pressa nem vi kkkk cara está corretissimo te devo essa mano bigadão.
carlos12
Localização: rio

Mensagemem Ter, 08 Abr 2008 11:50 am

beleza brother, q bom!
Precisando, conte com a gente.
Trevisolli
Localização: Araraquara - SP

Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Mensagemem Ter, 22 Abr 2008 1:39 pm

Toad
Localização: Seattle, WA

Matheus H. Gonçalves
www.toad.com.br
www.twitter.com/toadgeek


  • Veja também
    Respostas
    ExibiÇões
    Última mensagem


      Voltar para SQL

      Quem está online

      Usuários navegando neste fórum: Nenhum usuário registrado e 3 visitantes