uivo text_io.file_type;
cursor C(pDtIni date, pDtFim date) is
-- principal
select sol.cd_os,
to_char(sol.dt_pedido,'dd/mm/yyyy hh24:mi') dt_pedido,
to_char(sol.dt_execucao,'dd/mm/yyyy hh24:mi') dt_execucao,
fn_idade(sol.dt_pedido, 'a A m M d D h H mi MI', sol.dt_execucao) tempo_gasto,
como retringir periodo após as 18hs
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 06 Jan 2009 11:31 am
- Localização: São paulo
pessoal, sou iniciante e preciso de uma função ou soulução que restringe período após as 18hs até as 8hs de seg. a sexta e sábado após as 12hs e o domingo, preciso retornar o tempo que os técnico demoram para atender um chamado restringindo o periodo para não mascarar o tempo real.
-
- 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
Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP
Brother,
Faz uns testes com estes exemplos abaixo...
Qualquer coisa, manda pra gente...
Faz uns testes com estes exemplos abaixo...
SELECT TO_CHAR(SYSDATE,'hh24') hora
FROM dual;
IF TO_CHAR(teu_campo,'hh24') <= '08' OR
TO_CHAR(teu_campo,'hh24') >= '24'
THEN
dbms_output.put_line('Erro, não pode efetuar transação neste horário. ');
ELSE
dbms_output.put_line('OK! ');
END IF;
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Eae Trevis
Mas acho que não é isso que ele quer.
Acho que é algo assim:
* O cara começou o trabalho as 5:00pm e terminou as 09:00am do outro dia.
Teoricamente, ele só trabalhou 2 horas. Mas se fizer FIM-INICIO, vai mostrar 16 horas! saca ?
Mas acho que não é isso que ele quer.
Acho que é algo assim:
* O cara começou o trabalho as 5:00pm e terminou as 09:00am do outro dia.
Teoricamente, ele só trabalhou 2 horas. Mas se fizer FIM-INICIO, vai mostrar 16 horas! saca ?
-
- Rank: Programador Sênior
- Mensagens: 50
- Registrado em: Ter, 10 Abr 2007 11:08 am
- Localização: São Paulo - SP
M. Renan
Galera, trabalho com o washington que postou o problema.
Não tenho a solução mas posso tentar resumir o que ele precisa:
É exatamente como o Dr. Gori disse... precisamos calcular o tempo que um chamado levou para ser atendido, porém, esse tempo deve ser calculado dentro do horário de expediente: de segunda a sexta das 8:00 às 18:00, de sábado das 9:00 às 12:00 e não contar domingos.
É isso mesmo Dr.Gori, só estou reforçando! hehe... valeu !
Não tenho a solução mas posso tentar resumir o que ele precisa:
É exatamente como o Dr. Gori disse... precisamos calcular o tempo que um chamado levou para ser atendido, porém, esse tempo deve ser calculado dentro do horário de expediente: de segunda a sexta das 8:00 às 18:00, de sábado das 9:00 às 12:00 e não contar domingos.
É isso mesmo Dr.Gori, só estou reforçando! hehe... valeu !
-
- Rank: Analista Pleno
- Mensagens: 110
- Registrado em: Ter, 24 Mai 2005 9:16 pm
- Localização: Dongguan - Guangdong - China
Li o seu topico rapidamente e pensei algo mas não testei e não sei dizer se realmente ira funcionar, mas a minha ideia seria algo assim:
colocar em alguma tabela o horario de trabalho,
tipo segunda - 08:00 ate 18:00
Terca 08:00 - 18:00
Sabado 09:00 - 12:00
e dai fazer a sua consulta utilizando essas datas e horarios.
colocar em alguma tabela o horario de trabalho,
tipo segunda - 08:00 ate 18:00
Terca 08:00 - 18:00
Sabado 09:00 - 12:00
e dai fazer a sua consulta utilizando essas datas e horarios.
-
- Rank: Programador Sênior
- Mensagens: 53
- Registrado em: Sex, 18 Mai 2007 11:52 am
- Localização: Descalvado
Olá!
Talvez seu problema possa ser resolvido com um "loopzinho"...
Algo assim:
Código:
Não ficou muito elegante, mas é só pra dar uma ideia do q imaginei.
Abraço
Talvez seu problema possa ser resolvido com um "loopzinho"...
Algo assim:
Código:
Declare
v_inicio_servico date := to_date('01/01/2009 10:00','dd/mm/yyyy hh24:mi');
v_fim_servico date := to_date('03/01/2009 14:00','dd/mm/yyyy hh24:mi');
v_hora_inicial varchar2(5) := '08:00';
v_hora_final varchar2(5) := '17:00';
v_inicio_periodo date;
v_fim_periodo date;
v_horas number := 0;
v_dias number := 0;
v_data_corrente date;
Begin
v_inicio_periodo := trunc(v_inicio_servico);
v_data_corrente := trunc(v_inicio_servico);
WHILE trunc(v_data_corrente,'dd') <= trunc(v_fim_servico,'dd') LOOP
If v_inicio_servico > to_date(to_char(v_inicio_periodo,'dd/mm/yy')||v_hora_inicial,'dd/mm/yyhh24:mi') then
v_inicio_periodo := v_inicio_servico;
Else
v_inicio_periodo := to_date(to_char(v_inicio_periodo,'dd/mm/yy')||v_hora_inicial,'dd/mm/yyhh24:mi');
End if;
If v_fim_servico < to_date(to_char(v_data_corrente,'dd/mm/yy')||v_hora_final,'dd/mm/yyhh24:mi') then
v_fim_periodo := v_fim_servico;
Else
v_fim_periodo := to_date(to_char(v_data_corrente,'dd/mm/yy')||v_hora_final,'dd/mm/yyhh24:mi');
End if;
v_dias := v_dias + (v_fim_periodo - v_inicio_periodo);
v_data_corrente := v_data_corrente + 1;
v_inicio_periodo := v_data_corrente;
END LOOP;
v_horas := v_dias * 24;
dbms_output.put_line(v_horas);
End;
/
Não ficou muito elegante, mas é só pra dar uma ideia do q imaginei.
Abraço
-
- Rank: DBA Júnior
- Mensagens: 229
- Registrado em: Sex, 05 Set 2008 2:59 pm
- Localização: Igrejinha - RS
Brother...
usando a lógica que o marcio.adao postou aqui,
segue o código com as validações com dias da semana...
Ficou ainda menos elegante que a versão anterior, mas está funcional eiuaheiaheieahiueha
usando a lógica que o marcio.adao postou aqui,
segue o código com as validações com dias da semana...
DECLARE
v_inicio_servico DATE := to_date('09/01/2009 10:00', 'dd/mm/yyyy hh24:mi');
v_fim_servico DATE := to_date('12/01/2009 14:00', 'dd/mm/yyyy hh24:mi');
v_hora_inicial VARCHAR2(5) := '08:00';
v_hora_final VARCHAR2(5) := '18:00';
v_hora_inicial_sab VARCHAR2(5) := '09:00';
v_hora_final_sab VARCHAR2(5) := '12:00';
v_inicio_periodo DATE;
v_fim_periodo DATE;
v_horas NUMBER := 0;
v_dias NUMBER := 0;
v_data_corrente DATE;
BEGIN
v_inicio_periodo := trunc(v_inicio_servico);
v_data_corrente := trunc(v_inicio_servico);
WHILE trunc(v_data_corrente, 'dd') <= trunc(v_fim_servico, 'dd')
LOOP
IF upper(TRIM(to_char(v_data_corrente, 'day'))) IN
('MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY') THEN
IF v_inicio_servico >
to_date(to_char(v_inicio_periodo, 'dd/mm/yy') || v_hora_inicial
,'dd/mm/yyhh24:mi') THEN
v_inicio_periodo := v_inicio_servico;
ELSE
v_inicio_periodo := to_date(to_char(v_inicio_periodo, 'dd/mm/yy') ||
v_hora_inicial
,'dd/mm/yyhh24:mi');
END IF;
IF v_fim_servico <
to_date(to_char(v_data_corrente, 'dd/mm/yy') || v_hora_final
,'dd/mm/yyhh24:mi') THEN
v_fim_periodo := v_fim_servico;
ELSE
v_fim_periodo := to_date(to_char(v_data_corrente, 'dd/mm/yy') ||
v_hora_final
,'dd/mm/yyhh24:mi');
END IF;
ELSIF upper(TRIM(to_char(v_data_corrente, 'day'))) = 'SATURDAY' THEN
IF v_inicio_servico >
to_date(to_char(v_inicio_periodo, 'dd/mm/yy') || v_hora_inicial_sab
,'dd/mm/yyhh24:mi') THEN
v_inicio_periodo := v_inicio_servico;
ELSE
v_inicio_periodo := to_date(to_char(v_inicio_periodo, 'dd/mm/yy') ||
v_hora_inicial_sab
,'dd/mm/yyhh24:mi');
END IF;
IF v_fim_servico <
to_date(to_char(v_data_corrente, 'dd/mm/yy') || v_hora_final_sab
,'dd/mm/yyhh24:mi') THEN
v_fim_periodo := v_fim_servico;
ELSE
v_fim_periodo := to_date(to_char(v_data_corrente, 'dd/mm/yy') ||
v_hora_final_sab
,'dd/mm/yyhh24:mi');
END IF;
END IF;
IF upper(TRIM(to_char(v_data_corrente, 'day'))) <> 'SUNDAY' THEN
v_dias := v_dias + (v_fim_periodo - v_inicio_periodo);
END IF;
v_data_corrente := v_data_corrente + 1;
v_inicio_periodo := v_data_corrente;
END LOOP;
v_horas := v_dias * 24;
dbms_output.put_line(v_horas);
END;
-
- Rank: Estagiário Pleno
- Mensagens: 6
- Registrado em: Ter, 06 Jan 2009 11:31 am
- Localização: São paulo
Galera valeu!!!Obrigado pela força!!!
-
- Rank: Programador Júnior
- Mensagens: 22
- Registrado em: Seg, 25 Ago 2008 11:18 am
- Localização: Nova Mutum-MT
Alexandre Costa
DBA Oracle
DBA Oracle
Deselegante.... mas funcional!
só para FLORIAR.. rsrs
o final pode ficar assim:
Abraços
só para FLORIAR.. rsrs
o final pode ficar assim:
v_horas := v_dias * 24;
dbms_output.put_line(TRUNC(v_dias)||' Dia(s) e '||TRUNC(MOD(v_horas, 24))||' Hr(s)');
Abraços
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes