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
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

Brother,
Bom dia.

Pra pegar os sábados e domingos, tranquilo:

Selecionar tudo

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.
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

Trevisolli

vamos por partes. primeiro o domingo

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

Selecionar tudo

SELECT TO_CHAR(u.dtinicio,'DY') FROM usuario u 
where u.dtinicio like 'DOM'; 
tentei assim mas num deu não tem como fazer??
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

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?).

Selecionar tudo

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.
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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

Selecionar tudo

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:

Selecionar tudo

SELECT TO_CHAR(u.dtinicio,'DY') FROM usuario u 
ele retornou
SAB
DOM
QUI

e assim por diante
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

Brother,

Pelo que eu entendi, o usuário vai digitar um Range de Datas e, você deseja mostrar à ele somente dias Úteis, é isso?
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

Ai brother, faça uns testes:
Em PL/SQL:

Selecionar tudo

--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:

Selecionar tudo


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.
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

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?

Selecionar tudo

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.
carlos12
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 123
Registrado em: Qua, 24 Out 2007 4:31 pm
Localização: rio

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.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

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

beleza brother, q bom!
Precisando, conte com a gente.
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Responder
  • Informação
  • Quem está online

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