none
Cálculo de horas

    Question

  • Olá pessoal!

    Eu estou precisando fazer um relatório de chamados, com o total de horas de cada chamado, mas preciso trazer o resultado completo direto para a aplicação, existe alguma forma de fazer isto?

    Eu tenho:

    Tabela chamados(id_chamado, id_empresa, data(datetime), hora_inicial(datetime), hora_final(datetime)

    Preciso de um select que retorne qual o total de horas que cada empresa utilizou.

    Acho que o campo total_horas do select não pode ser datetime, pois sempre passa de 24 horas o total das empresas.

    Obrigado pela ajuda!

    Fernando

    Tuesday, August 22, 2006 12:22 AM

Answers

  • achei melhor fazer uma funcao onde vc. podera usar dentro de um select. segue oe xemplo

     


    Create function Ufn_Horas (@Start Datetime, @End   Datetime)
    Returns Varchar(05)
    Begin
    Declare @Hora Varchar(02)
    Declare @Min  Varchar(02)

    Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60

    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                  Case When Len(@Min)=1 Then '0'+@Min Else @Min End) 
    End

    Select dbo.Ufn_Horas('2006-09-01 10:15','2006-09-01 15:10')

     

    qualquer coisa retorne.

    Friday, September 01, 2006 10:26 AM
  • seuge alterado

    alter function Ufn_Horas (@Start Datetime, @End   Datetime)
    Returns Varchar(10)
    Begin
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)

    Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60

    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                  Case When Len(@Min)=1 Then '0'+@Min Else @Min End) 
    End
    go
    Select dbo.Ufn_Horas('2006-09-01 10:15','2006-09-11 15:10')

     

    sim da para usar no select sem problemas

    Select dbo.Ufn_Horas(campo_datetime,campo_datetime) from tabela.

     

    Ab/

    Friday, September 01, 2006 4:20 PM
  • opa foi burrada minha mesmo, segue um exemplo agora acho que sta ok


    Create function Ufn_Formata_Horas (@Minutos Int)
    Returns Varchar(10)
    Begin
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)

    Select @Hora = @Minutos/60 ,
           @Min  = @Minutos%60

    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                  Case When Len(@Min)=1 Then '0'+@Min Else @Min End) 
    End
    ---

    drop table #horarios

     Create Table #horarios (estacao int, horaI datetime, HoraF datetime)
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 11:00')
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-02 11:00')
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 15:00')

     Select estacao, dbo.Ufn_Formata_Horas(Sum(DateDiff(n,HoraI, HoraF))) As horas
     From #horarios
     Group by Estacao


     

    Abs;

    Wednesday, September 13, 2006 4:42 PM

All replies

  • Olá Fernando,

    Acho que a melhor forma de vc trabalhar com isso seria amazenando a data em formato numérico. No link abaixo vc pode encontrar alguns artigos sobre o assunto.

    http://classicasp.aspfaq.com/date-time-routines-manipulation.html

    um abraço

    Tuesday, August 22, 2006 1:16 AM
  • Fernando,

    Já tentou utilizar o comando DateDiff.

    Veja o exemplo:

    select datediff(year,28/04/1980,getdate()) as anos

    select datediff(day,datarevisao,dataproducao) as anos from ctluvas
    where datarevisao>='01/01/2004'

    Tuesday, August 22, 2006 12:04 PM
  • Fernando, tenho um sistema que tratamos esse tipo de informação.
    veja exemplo:

    SELECT
    DATEDIFF(hour, s.dt_Cadastro, a.dt_Conclusao) AS Horas,     
    ((datepart(n,a.dt_Conclusao)) - (datepart(n,s.dt_Cadastro))) AS Minutos,
    ((datepart(s,a.dt_Conclusao)) - (datepart(s,s.dt_Cadastro))) AS Segundos
     From  SOLICITACAO s, ANDAMENTO a
    WHERE a.cd_Solicitacao = s.cd_Solicitacao  
    and fl_Pendente = 1      
    and a.cd_Solicitacao = 100
        

         tempo = Horas & "h : " & Minutos & "m : " & Segundos & "s"

    qualquer coisa retorne

    Tuesday, August 22, 2006 12:46 PM
  • Olá Fernando vc pode utilizar o DATEDIFF

    da uma olhada em meu site la tem um artigo de como utilizar  calculos com datas

    (Trabalhando com Funções de Data.)
    http://www.msit.com.br/publicacaoDetalhes.aspx?id=29

    Tuesday, August 22, 2006 12:52 PM
  • segue

     

     

    Declare @DataI datetime, @DataF datetime

    Select @DataI = '2006-08-21 10:20' , @DataF = '2006-08-22 22:10'

    Select Datediff(n,@DataI,@DataF)/60 as horas, Datediff(n,@DataI,@DataF)%60 as Minutos

     

    a divisao, por 60 sao as horas, o modulo da divisao sao os minutos.

     

    Abs;

    Tuesday, August 22, 2006 1:15 PM
  • Pessoal, primeiramente obrigado por todas as respostas.

    Acho que me expressei mal, eu estou tentando criar um Select que me retorne a diferença de horário, mas que o mesmo já venha formatado diretamente num campo do SQL, como Total_Horas, para cada registro que o select retornar.

    Tem como ser feito isto?

    Obrigado,

    Fernando

    Tuesday, August 22, 2006 7:07 PM
  • Fernando acesse meu site la tem um exemplo que mostra como retornar diferença de datas e o retorno pode ser em horas minutos dias

    (Trabalhando com Funções de Data.)
    http://www.msit.com.br/publicacaoDetalhes.aspx?id=29

     

    Tuesday, August 22, 2006 7:24 PM
  • se sua hora passar de 24 horas um campo datetime nao ira ajudar, acho melhor deixar separado em horas e minuos em um campo int, ficara mais facil depois, quando sua aplicacao ler as horas vc. pode formatar para mostrar no aplicativo.

     

    Abs;

    Tuesday, August 22, 2006 7:44 PM
  • Marcelo, não entendi muito bem seu Select.

    Por que vc usou um sinal de porcentagem?

    Datediff(n,@DataI,@DataF)%60 as Minutos

    Outra dúvida, eu tentei fazer com DateDiff de acordo com os dados na minha tabela, mas em alguns casos os resultados voltaram pra mim assim:

    horas - minutos

    4 - 300

    5 - 240

    Pra mim assim não serve, eu preciso que o valor já venha correto do banco, para que eu faça a formatação na aplicação, tem como resolver isto?

    Obrigado,

    Fernando

     

    Thursday, August 24, 2006 3:31 AM
  •  

     

     o % e para retornar o modulo da divisao, esse modulo e total de minutos de uma hora, por exemplo se vc. dividir

     90 minutos por 60 tera 1 e o resto 30-- esse resto ( modulo _ corresponde aos minutos, vc. pode postar algumas linhas da sua tabela para que a gente possa olhar assim fica mais facil descobrir o erro.

     

    aBs;

    Thursday, August 24, 2006 10:23 AM
  • Marcelo,

    Vc conhece alguma forma ou função de já trazer o resultado formatado como hh:mm:ss para o programa?

    Infelizmente tenho que seguir uma determinação de usar o mínimo de código possível no programa.

    Se for uma StoredProcedure, tudo bem.

    Agradeço desde já!

    Abraços!

    Fernando

     

    Thursday, August 31, 2006 9:00 PM
  • achei melhor fazer uma funcao onde vc. podera usar dentro de um select. segue oe xemplo

     


    Create function Ufn_Horas (@Start Datetime, @End   Datetime)
    Returns Varchar(05)
    Begin
    Declare @Hora Varchar(02)
    Declare @Min  Varchar(02)

    Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60

    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                  Case When Len(@Min)=1 Then '0'+@Min Else @Min End) 
    End

    Select dbo.Ufn_Horas('2006-09-01 10:15','2006-09-01 15:10')

     

    qualquer coisa retorne.

    Friday, September 01, 2006 10:26 AM
  • seria mais ou menos isso?

    select id_empresa, sum(datediff(hour,hora_final,hora_inicial)) total_horas from tabela

    group by id_empresa

    order by id_empresa

    Friday, September 01, 2006 1:51 PM
  • Marcelo, é quase isso!obrigado!

    Deu erro quando tentei colocar dias diferentes, o resultado veio assim: 0*:55

    Outra coisa, tem como usar esta função dentro de um outro select?

    Exemplo:

    select data, unf_horas(data_inicial, data_final) from horarios

    ?

    Abraços!

    Fernando

    Friday, September 01, 2006 2:06 PM
  • seuge alterado

    alter function Ufn_Horas (@Start Datetime, @End   Datetime)
    Returns Varchar(10)
    Begin
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)

    Select @Hora = DateDiff(n,@Start,@end)/60 ,
           @Min  = DateDiff(n,@Start,@end)%60

    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                  Case When Len(@Min)=1 Then '0'+@Min Else @Min End) 
    End
    go
    Select dbo.Ufn_Horas('2006-09-01 10:15','2006-09-11 15:10')

     

    sim da para usar no select sem problemas

    Select dbo.Ufn_Horas(campo_datetime,campo_datetime) from tabela.

     

    Ab/

    Friday, September 01, 2006 4:20 PM
  • Oi Marcelo!

    Valeu, era exatamente o que eu precisava!

    Abraço!

    Fernando

    Friday, September 01, 2006 5:02 PM
  • Pessoal, me surgiu uma nova necessidade, vejam se conseguem me ajudar.

    Eu tenho o seguinte select:

    select e.nome_rede as Estacao, h.data as Data, dbo.ufn_horas(h.hora_inicio, h.hora_fim) as Carga_Horaria

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    group by e.nome_rede, h.data, dbo.ufn_horas(h.hora_inicio, h.hora_fim)

    Porém eu preciso que ele retorne os dados somados, e com esta função que o Marcelo me passou, e de nenhuma outra forma estou conseguindo fazer a soma da forma que preciso, pois os dados são retornados assim:

    Estacao                                  Data                    Carga_Horaria
    ---------------------------------------- ----------------------- -------------
    GISELE                                   2006-08-01 00:00:00.000 00:20
    GISELE                                   2006-08-03 00:00:00.000 00:20
    GISELE                                   2006-08-15 00:00:00.000 00:30
    JOAO                                     2006-07-04 00:00:00.000 00:30
    JOAO                                     2006-07-25 00:00:00.000 00:10
    JOAO                                     2006-08-03 00:00:00.000 00:20
    MAX                                      2006-07-06 00:00:00.000 02:00
    MAX                                      2006-07-10 00:00:00.000 00:20
    MAX                                      2006-07-10 00:00:00.000 00:30
    MAX                                      2006-07-10 00:00:00.000 00:40
    MAX                                      2006-07-18 00:00:00.000 00:10
    MAX                                      2006-07-18 00:00:00.000 00:20
    MAX                                      2006-07-18 00:00:00.000 00:30
    MAX                                      2006-07-18 00:00:00.000 01:00
    MAX                                      2006-07-20 00:00:00.000 00:10
    MAX                                      2006-07-20 00:00:00.000 00:20
    MAX                                      2006-07-20 00:00:00.000 00:30
    MAX                                      2006-07-25 00:00:00.000 00:05
    MAX                                      2006-07-25 00:00:00.000 00:20
    MAX                                      2006-07-25 00:00:00.000 00:30
    MAX                                      2006-07-25 00:00:00.000 01:00
    MAX                                      2006-08-01 00:00:00.000 00:10
    MAX                                      2006-08-01 00:00:00.000 00:50
    MAX                                      2006-08-03 00:00:00.000 00:20
    MAX                                      2006-08-10 00:00:00.000 00:20
    MAX                                      2006-08-10 00:00:00.000 00:30
    MAX                                      2006-08-10 00:00:00.000 00:40
    MAX                                      2006-08-11 00:00:00.000 00:30
    MAX                                      2006-08-12 00:00:00.000 00:30
    MAX                                      2006-08-15 00:00:00.000 00:30
    MAX                                      2006-08-18 00:00:00.000 01:00
    PC106                                    2006-07-18 00:00:00.000 00:20
    PC106                                    2006-08-01 00:00:00.000 00:15
    PC106                                    2006-08-01 00:00:00.000 00:20
    PC106                                    2006-08-08 00:00:00.000 00:30
    PC106                                    2006-08-10 00:00:00.000 00:10
    PC106                                    2006-08-15 00:00:00.000 01:00
    PC113                                    2006-08-03 00:00:00.000 00:20
    PC116                                    2006-08-01 00:00:00.000 00:20
    PC116                                    2006-08-15 00:00:00.000 00:10
    PC117                                    2006-07-25 00:00:00.000 00:20
    PC117                                    2006-08-03 00:00:00.000 00:20
    PC120                                    2006-08-03 00:00:00.000 00:20
    PC120                                    2006-08-10 00:00:00.000 00:20
    PC121                                    2006-07-06 00:00:00.000 01:00
    PC121                                    2006-08-03 00:00:00.000 00:20
    PC122                                    2006-07-04 00:00:00.000 00:10
    PC122                                    2006-07-18 00:00:00.000 00:20
    PC122                                    2006-08-03 00:00:00.000 00:20
    PC125                                    2006-07-06 00:00:00.000 00:30
    PC125                                    2006-07-25 00:00:00.000 00:20
    PC126                                    2006-08-01 00:00:00.000 00:15
    PC126                                    2006-08-10 00:00:00.000 00:10
    PC127                                    2006-08-01 00:00:00.000 00:30
    PC127                                    2006-08-10 00:00:00.000 00:20
    PC128                                    2006-08-03 00:00:00.000 00:20
    PC128                                    2006-08-10 00:00:00.000 00:20
    Priscila                                 2006-07-04 00:00:00.000 00:10
    Priscila                                 2006-08-01 00:00:00.000 00:20
    Priscila                                 2006-08-08 00:00:00.000 01:30
    Retah branco                             2006-07-04 00:00:00.000 00:10
    Retah branco                             2006-07-25 00:00:00.000 00:10
    Retah branco                             2006-07-25 00:00:00.000 00:30
    Retah branco                             2006-08-01 00:00:00.000 00:10
    Retah branco                             2006-08-03 00:00:00.000 00:20
    Retah branco                             2006-08-08 00:00:00.000 00:40
    Retah janela                             2006-07-04 00:00:00.000 00:10
    Retah janela                             2006-08-01 00:00:00.000 00:10
    Retah porta                              2006-07-04 00:00:00.000 00:10
    Retah porta                              2006-07-04 00:00:00.000 00:40
    Retah porta                              2006-08-01 00:00:00.000 00:10
    ZONZINI                                  2006-08-01 00:00:00.000 00:10
    ZONZINI                                  2006-08-03 00:00:00.000 00:20

    (73 row(s) affected)

    O que eu preciso é que ele me traga apenas uma vez o nome de cada estação, com o todas de horas de cada uma, deu pra entender?

    Desta forma, ele está apenas listando todos os registros, e relacionando com a tabela estações.

    Obrigado!

    Fernando

    Monday, September 04, 2006 10:41 PM
  • Pessoal,

    Alguém consegue me ajudar com esse select/função?

    Obrigado!

    Fernando

    Wednesday, September 06, 2006 7:41 PM
  • Alguma ajuda pessoal?

    Monday, September 11, 2006 2:02 PM
  •  

     

     

    select e.nome_rede as Estacao, h.data as Data, dbo.ufn_horas(min(h.hora_inicio), max(h.hora_fim)) as Carga_Horaria

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    group by e.nome_rede, h.data, dbo.ufn_horas(min(h.hora_inicio), max(h.hora_fim))

     

    veja se assim esta ok

     

    Monday, September 11, 2006 2:40 PM
  • Oi Marcelo, obrigado por responder.

    Deu este erro:

    Msg 144, Level 15, State 1, Line 1

    Cannot use an aggregate or a subquery in an expression used for the group by list of a GROUP BY clause.

    Valeu!

    Fernando

    Monday, September 11, 2006 6:27 PM
  • desculpe.

     

    select e.nome_rede as Estacao, h.data as Data, dbo.ufn_horas(min(h.hora_inicio), max(h.hora_fim)) as Carga_Horaria

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    group by e.nome_rede, h.data

     

    Abs.

    Monday, September 11, 2006 6:37 PM
  • Fala Marcelo.

    Ele ainda tá trazendo vários registros para cada estação, eu precisava que ele trouxe um registro de cada estação, com a carga horária total de cada estação...

    Será que tem como fazer isso?

    Valeu, obrigado!

    Fernando

    Monday, September 11, 2006 10:02 PM
  • tem como vc. postar um exemplo do retorno com o ultimo select, acho que esta agrupando demais mais precisava ver um resultado para entender melhor.

     

    Abs/

    Tuesday, September 12, 2006 2:57 AM
  • Opa, tem sim.

    Coloquei um order by e.nome_rede no final pra vc ver como está retornando mais de um e não está fazendo a soma do agrupamento.

    Estacao                                  Data                    Carga_Horaria
    ---------------------------------------- ----------------------- -------------
    CP120                                    2006-08-03 00:00:00.000 00:20
    CP120                                    2006-08-10 00:00:00.000 00:20
    CP120                                    2006-09-08 00:00:00.000 00:30
    CP121                                    2006-07-06 00:00:00.000 01:00
    CP121                                    2006-08-03 00:00:00.000 00:20
    CP121                                    2006-09-08 00:00:00.000 00:30
    CP122                                    2006-07-04 00:00:00.000 00:10
    CP122                                    2006-07-18 00:00:00.000 00:20
    CP122                                    2006-08-03 00:00:00.000 00:20
    CP122                                    2006-09-08 00:00:00.000 00:30
    CP125                                    2006-07-06 00:00:00.000 00:30
    CP125                                    2006-07-25 00:00:00.000 00:20
    CP125                                    2006-09-08 00:00:00.000 00:30
    CP126                                    2006-08-01 00:00:00.000 00:15
    CP126                                    2006-08-10 00:00:00.000 00:10
    CP126                                    2006-09-08 00:00:00.000 00:30
    CP127                                    2006-08-01 00:00:00.000 00:30
    CP127                                    2006-08-10 00:00:00.000 00:20
    CP127                                    2006-09-08 00:00:00.000 00:30
    CP128                                    2006-08-03 00:00:00.000 00:40
    CP128                                    2006-08-10 00:00:00.000 00:20
    CP128                                    2006-09-08 00:00:00.000 00:30
    GISELE                                   2006-08-01 00:00:00.000 00:20
    GISELE                                   2006-08-03 00:00:00.000 00:20
    GISELE                                   2006-08-15 00:00:00.000 00:30
    JOAO                                     2006-07-04 00:00:00.000 00:30
    JOAO                                     2006-07-25 00:00:00.000 00:10
    JOAO                                     2006-08-03 00:00:00.000 00:20
    MAX                                      2006-07-06 00:00:00.000 02:00
    MAX                                      2006-07-10 00:00:00.000 02:00
    MAX                                      2006-07-18 00:00:00.000 04:00
    MAX                                      2006-07-20 00:00:00.000 04:20
    MAX                                      2006-07-25 00:00:00.000 03:40
    MAX                                      2006-08-01 00:00:00.000 01:00
    MAX                                      2006-08-03 00:00:00.000 00:20
    MAX                                      2006-08-10 00:00:00.000 03:00
    MAX                                      2006-08-11 00:00:00.000 00:30
    MAX                                      2006-08-12 00:00:00.000 00:30
    MAX                                      2006-08-15 00:00:00.000 04:00
    MAX                                      2006-08-18 00:00:00.000 01:00
    MAX                                      2006-08-29 00:00:00.000 04:00
    MAX                                      2006-09-05 00:00:00.000 02:30
    MAX                                      2006-09-08 00:00:00.000 00:30
    PC106                                    2006-07-18 00:00:00.000 00:20
    PC106                                    2006-08-01 00:00:00.000 01:05
    PC106                                    2006-08-08 00:00:00.000 00:30
    PC106                                    2006-08-10 00:00:00.000 00:10
    PC106                                    2006-08-15 00:00:00.000 01:00
    PC113                                    2006-08-03 00:00:00.000 00:20
    PC116                                    2006-08-01 00:00:00.000 00:20
    PC116                                    2006-08-15 00:00:00.000 00:10
    PC116                                    2006-09-05 00:00:00.000 00:30
    PC117                                    2006-07-25 00:00:00.000 00:20
    PC117                                    2006-08-03 00:00:00.000 00:20
    Priscila                                 2006-07-04 00:00:00.000 00:10
    Priscila                                 2006-08-01 00:00:00.000 00:20
    Priscila                                 2006-08-08 00:00:00.000 01:30
    Priscila                                 2006-09-05 00:00:00.000 00:30
    Retah branco                             2006-07-04 00:00:00.000 00:10
    Retah branco                             2006-07-25 00:00:00.000 00:40
    Retah branco                             2006-08-01 00:00:00.000 00:10
    Retah branco                             2006-08-03 00:00:00.000 00:20
    Retah branco                             2006-08-08 00:00:00.000 00:40
    Retah branco                             2006-09-05 00:00:00.000 00:30
    Retah janela                             2006-07-04 00:00:00.000 00:10
    Retah janela                             2006-08-01 00:00:00.000 00:10
    Retah janela                             2006-09-05 00:00:00.000 00:30
    Retah porta                              2006-07-04 00:00:00.000 01:20
    Retah porta                              2006-08-01 00:00:00.000 00:10
    Retah porta                              2006-09-05 00:00:00.000 00:30
    ZONZINI                                  2006-08-01 00:00:00.000 00:10
    ZONZINI                                  2006-08-03 00:00:00.000 00:20

    (72 row(s) affected)

     

    Obrigado novamente!

    Abraços!

    Fernando

    Tuesday, September 12, 2006 3:34 AM
  • o que nao esta agupando neste caso e o campo data, vc. pode colocar um max ou min para pegar somente e ultima ou primeira data deste campo veja no exemplo

    select e.nome_rede as Estacao, max(h.data) as Data, dbo.ufn_horas(min(h.hora_inicio), max(h.hora_fim)) as Carga_Horaria

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    group by e.nome_rede

     

    caso queira tambem pode colocar um min, qualquer coisa retorne.

     

    abs;

    Tuesday, September 12, 2006 9:57 AM
  • Fala Marcelo.

    Eu acho que tem alguma coisa errada, pois eu usei o último Select que vc me passou e aparentemente estava certo, mas se faço um outro select detalhado(abaixo)ele dá uma carga horária menor, dá uma olhada:

    select e.nome_rede as Estacao, dbo.ufn_horas(min(h.hora_inicio), max(h.hora_fim)) as Carga_Horaria

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    where e.nome_rede = 'cp120'

    group by e.nome_rede

    Resultado:

    Estacao                                  Data                              Carga_Horaria
    ---------------------------------------- ----------------------- -------------
    CP120                                    2006-09-08 00:00:00.000 02:40

    (1 row(s) affected)

    select e.nome_rede as Estacao, h.data as Data, dbo.ufn_horas(h.hora_inicio, h.hora_fim) as 'Carga_horaria'

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    where e.nome_rede = 'cp120'

    Estacao                                  Data                    Carga_horaria
    ---------------------------------------- ----------------------- -------------
    CP120                                    2006-08-10 00:00:00.000 00:20
    CP120                                    2006-08-03 00:00:00.000 00:20
    CP120                                    2006-09-08 00:00:00.000 00:30

    (3 row(s) affected)

    Deu pra entender?Se eu faço o Select desta outra forma, o resultado vem diferente?Acho que estou fazendo algo errado?

    Valeu, obrigado!

    Fernando

     

     


    Tuesday, September 12, 2006 9:37 PM
  • estranho nesse select

    select e.nome_rede as Estacao, dbo.ufn_horas(min(h.hora_inicio), max(h.hora_fim)) as Carga_Horaria

    from horarios_detalhes h inner join estacoes e

    on h.id_estacao = e.id_estacao

    where e.nome_rede = 'cp120'

    group by e.nome_rede

    Resultado:

    Estacao                                  Data                              Carga_Horaria
    ---------------------------------------- ----------------------- -------------
    CP120                                    2006-09-08 00:00:00.000 02:40

    a coluna data nao deveria aparecer ?, tem como vc vou fazer um exemplo aqui para enviar para vc.

     

    Abs/

    Wednesday, September 13, 2006 10:28 AM
  • Oi Marcelo,

    Neste caso eu havia removido a coluna data no select, mas postei o retorno com a coluna data, foi só isso que mudei.

    O estranho de horário estar aparecendo errado nos dois selects...

    Valeu, obrigado!

    Fernando

    Wednesday, September 13, 2006 2:47 PM
  • veja este exemplo

     


     drop table #horarios

     Create Table #horarios (estacao int, horaI datetime, HoraF datetime)
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 11:00')
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-02 11:00')
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 15:00')

     Select estacao,Dbo.Ufn_Horas(min(HoraI), Max(HoraF)) As horas
     From #horarios
     Group by Estacao

     

    Abs;

    Wednesday, September 13, 2006 2:58 PM
  • Marcelo, pra mim aqui o seu Select deu 25:00, mas acho que tá errado... olha só...

     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 11:00') - 1:00
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-02 11:00') - 25:00
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 15:00') - 5 :00

    O total deveria ser 31:00 concorda?

    É esse o problema que ta dando aqui pra mim...

    Valeu, tks!

    Fernando

    Wednesday, September 13, 2006 4:28 PM
  • opa foi burrada minha mesmo, segue um exemplo agora acho que sta ok


    Create function Ufn_Formata_Horas (@Minutos Int)
    Returns Varchar(10)
    Begin
    Declare @Hora Varchar(04)
    Declare @Min  Varchar(02)

    Select @Hora = @Minutos/60 ,
           @Min  = @Minutos%60

    Return (Select Case When Len(@Hora)=1 Then '0'+@Hora Else @Hora End + ':' +
                  Case When Len(@Min)=1 Then '0'+@Min Else @Min End) 
    End
    ---

    drop table #horarios

     Create Table #horarios (estacao int, horaI datetime, HoraF datetime)
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 11:00')
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-02 11:00')
     Insert into #horarios (estacao, HoraI, HoraF) Values (1,'2006-08-01 10:00', '2006-08-01 15:00')

     Select estacao, dbo.Ufn_Formata_Horas(Sum(DateDiff(n,HoraI, HoraF))) As horas
     From #horarios
     Group by Estacao


     

    Abs;

    Wednesday, September 13, 2006 4:42 PM
  • Oi Marcelo!

    Pelos testes que fiz, acho que deu certo!!!

    Vou fazer mais testes no meu programa, mas agora acho que está certo!

    Muito obrigado!

    Fernando

    Wednesday, September 13, 2006 5:37 PM