none
Função Soma Date RRS feed

  • Pergunta

  • Somar campos horas, mas com comando

    Case when iif ([status_1] ='ATIVA', (convert(varchar(10), DATEDIFF(DAY, 0, relog_1) * 24 + DATEPART(HOUR, relog_1)) +RIGHT(convert(char(12), relog_1, 114), 10)),null) is not  Null   Then  iif ([status_1] ='ATIVA', (convert(varchar(10), DATEDIFF(DAY, 0, relog_1) * 24 + DATEPART(HOUR, relog_1)) +RIGHT(convert(char(12), relog_1, 114), 10)),null) +iif ([status_0] ='ATIVA', (convert(varchar(10), DATEDIFF(DAY, 0, relog_0) * 24 + DATEPART(HOUR, relog_0)) +RIGHT(convert(char(12), relog_0, 114), 10)),null) 

    else null end as SOMA

    Tentei realizar a soma via, dateadd, sum() e outra função e não consegui..

    total0 total1 SOMA
    3:25:57:000 17:14:31:000 17:14:31:0003:25:57:000 onde seria 20:40:27:000

    terça-feira, 22 de dezembro de 2020 14:19

Respostas

  • Bom dia,

    Experimente fazer a soma das 2 colunas antes de fazer a conversão para varchar.

    Se você fizer depois da conversão para varchar o resultado vai ser a concatenação das strings mesmo.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 12:15
    terça-feira, 22 de dezembro de 2020 15:09
  • Segue uma sugestão para testes:

    select 
      case when status_1 = 'ATIVA' and status_0 = 'ATIVA' 
        then 
          convert(varchar(10), DATEDIFF(DAY, 0, relog_1 + relog_0) * 24 + DATEPART(HOUR, relog_1 + relog_0)) +
          RIGHT(convert(char(12), relog_1 + relog_0, 114), 10)
      end as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 12:15
    terça-feira, 22 de dezembro de 2020 19:16
  • vou fazer invertido iniciando do maior para o menor e testar


    • Editado claudiof terça-feira, 22 de dezembro de 2020 20:16
    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 17:42
    terça-feira, 22 de dezembro de 2020 20:16
  • Segue outra alternativa para testes onde é utilizada a IIF que você utilizou no início também para verificar se o status é igual a 'ATIVA' e se for é somado o horário, se não for é somado zero:

          convert
            (varchar(10), 
             DATEDIFF
               (DAY, 
                0, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0)) * 
             24 + 
             DATEPART
               (HOUR, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0)) + 
          RIGHT
            (convert
               (char(12), 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0),
                114), 
             10) as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 19:54
    quarta-feira, 23 de dezembro de 2020 13:13
  • Estava faltando um fechamento de parênteses antes do Right, e parece que o Cast para Datetime não é necessário:

          convert
            (varchar(10), 
             DATEDIFF
               (DAY, 
                0, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0)) * 
             24 + 
             DATEPART
               (HOUR, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0))) + 
          RIGHT
            (convert
               (char(12), 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0),
                114), 
             10) as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 19:35
    quarta-feira, 23 de dezembro de 2020 14:07
  • Não foi a mesma não, tem um fechamento de parênteses a mais. Na linha do IIF que antecede a função Right haviam 2 fechamentos de parênteses e na última sugestão são 3, um para a IIF, um para a DatePart e um para a Convert.

    Acompanhe o teste realizado na página abaixo:

    https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=5573130a8b68f60e0e77baf4e1f52440

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 16:01
    quarta-feira, 23 de dezembro de 2020 14:48
  • Para verificarmos o que está ocorrendo é melhor você postar um Insert com os dados (status e horário) da(s) linha(s) onde está(ão) ocorrendo o problema, assim como o código da consulta que você está utilizando.

    Já que temos a página no dbfiddle.uk, se você preferir também pode fazer as alterações para acrescentar os dados e o reproduzir o problema lá no site, e depois postar o novo link por aqui.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 19:54
    quarta-feira, 23 de dezembro de 2020 18:40
  • tentei converter das duas maneiras mão rodou

    ,cast([horatotal] as datetime)
     ,convert(datetime, [horatotal], 104)

    preciso fazer 

    horatotali -  horatotalp
    0:09:59:000 0:00:00:000

    e validar se horatotalp for 0:00:00:000 colocar horatotali

    Mensagem 242, Nível 16, Estado 3, Linha 2
    The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 11:02
    quarta-feira, 23 de dezembro de 2020 19:54
  • HoraTotal é a coluna com o resultado da soma? Se for você tem que fazer os cálculos e comparações antes de converter para varchar. 

    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 11:02
    quarta-feira, 23 de dezembro de 2020 20:34
  • se eu fazer assim funciona

    convert(bigint, replace([horatotali],':','')) - convert(bigint, replace([horatotalp],':','')) as incidentetotal,

    mas preciso dos separador para ter o resultado em d horas minutos e seg



    • Editado claudiof segunda-feira, 28 de dezembro de 2020 15:03
    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 17:42
    segunda-feira, 28 de dezembro de 2020 14:41
  • me de exemplo fiz da maneira acima e não funcionou

     Sum(Left(horatotali,2) * 3600 + substring(horatotali, 4,2) * 60 + substring(horatotali, 7,2)) -
     Sum(Left(horatotalp,2) * 3600 + substring(horatotalp, 4,2) * 60 + substring(horatotalp

    , 7,2)) as diferença

    convert(varchar,(diferenca/86400)) + 'd:' + format(dateadd(ss,diferenca,0),'HH\h:mm\m:ss\s') as teste

    ele funciona para 2 casa no dias,mas para 1,3 e 4 casas em dias da erro. 

    mas tenho campos com 0:09:59:000,253:03:59:000,1953:03:59:000 não funciona, 

    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 17:42
    segunda-feira, 28 de dezembro de 2020 14:49

Todas as Respostas

  • Bom dia,

    Experimente fazer a soma das 2 colunas antes de fazer a conversão para varchar.

    Se você fizer depois da conversão para varchar o resultado vai ser a concatenação das strings mesmo.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 12:15
    terça-feira, 22 de dezembro de 2020 15:09
  • não funcinou
    terça-feira, 22 de dezembro de 2020 18:29
  • não funcinou
    somatestes total0 total1 total2 total3 total4 SOMA
    NULL 18:20:00:000 18:20:00:000 NULL NULL NULL NULL
    terça-feira, 22 de dezembro de 2020 18:48
  • Segue uma sugestão para testes:

    select 
      case when status_1 = 'ATIVA' and status_0 = 'ATIVA' 
        then 
          convert(varchar(10), DATEDIFF(DAY, 0, relog_1 + relog_0) * 24 + DATEPART(HOUR, relog_1 + relog_0)) +
          RIGHT(convert(char(12), relog_1 + relog_0, 114), 10)
      end as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 12:15
    terça-feira, 22 de dezembro de 2020 19:16

  • Preciso ler 45 campos e calcular, as sua maneira se colocar o case funciona,

    mas preciso sem para fazer os calculo e colocar na mesma coluna, ai me apresenta erro no valor calculo..

    select
      case when  status_0 = 'ATIVA'     then       convert(varchar(10), DATEDIFF( relog_0) * 24 + DATEPART(HOUR, relog_0)) +      RIGHT(convert(char(12), relog_0, 114), 10)
       when status_1 = 'ATIVA' and status_0 = 'ATIVA'  then
         convert(varchar(10), DATEDIFF(DAY, 0, relog_1 + relog_0) * 24 + DATEPART(HOUR, relog_1 + relog_0)) +
          RIGHT(convert(char(12), relog_1 + relog_0, 114), 10)
       when status_2 = 'ATIVA' and status_1 = 'ATIVA' and status_0 = 'ATIVA'  then ..
     end as Soma




    • Editado claudiof terça-feira, 22 de dezembro de 2020 20:00
    terça-feira, 22 de dezembro de 2020 20:00
  • vou fazer invertido iniciando do maior para o menor e testar


    • Editado claudiof terça-feira, 22 de dezembro de 2020 20:16
    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 17:42
    terça-feira, 22 de dezembro de 2020 20:16
  • Fiz aquela sugestão com base nas informações que você postou no início.

    Considerando essa estrutura com 45 colunas "status" e "relog", vou postar uma outra sugestão:

    select 
      convert(varchar(10), DATEDIFF(DAY, 0, ca.soma) * 24 + DATEPART(HOUR, ca.soma)) +
      RIGHT(convert(char(12), ca.Soma, 114), 10) as Soma
    from Tabela as t
    cross apply
    (
        select 
          dateadd(millisecond, sum(datediff(millisecond, 0, relog_n)), 0) as Soma
        from 
        (
          values 
            (t.status_0, t.relog_0),
            (t.status_1, t.relog_1),
            (t.status_2, t.relog_2),
            (t.status_3, t.relog_3)
        ) as v(status_n, relog_n)
        where
          status_n = 'ATIVA'
    ) as ca

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 22 de dezembro de 2020 20:34
  • Tenho 45 campos

    onde faço substração de dois campos para todos os 45 tenho resultado, 

    depois preciso converter em hora, e somar todos esses resultados onde o status for ativa 

    trazendo esse resultado em uma única coluna,

    tentei executar acima seu script não entendi se vou utilizar algum código anterior ou não

    terça-feira, 22 de dezembro de 2020 21:12
  • Segue outra alternativa para testes onde é utilizada a IIF que você utilizou no início também para verificar se o status é igual a 'ATIVA' e se for é somado o horário, se não for é somado zero:

          convert
            (varchar(10), 
             DATEDIFF
               (DAY, 
                0, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0)) * 
             24 + 
             DATEPART
               (HOUR, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0)) + 
          RIGHT
            (convert
               (char(12), 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0),
                114), 
             10) as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 19:54
    quarta-feira, 23 de dezembro de 2020 13:13
  • relog = 1900-01-01 00:09:00.000

    quando executo esse vosso acima

     Conversion failed when converting the varchar value 'Jan  1 1900 ' to data type int.

    quarta-feira, 23 de dezembro de 2020 13:22
  • Experimente colocar o trecho abaixo onde estiver 0 (zero):

    cast(0 as datetime)

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 23 de dezembro de 2020 13:46
  • mesmo erro de conversão

    parada_relogio_status_0 parada_relogio_status_1 parada_relogio_status_2 parada_relog_0                parada_relog_1

    CANCELADA                ATIVA                               NULL                            1900-01-01 00:09:00.000

    1900-01-01 04:00:00.000

    convert
            (varchar(10),
             DATEDIFF
               (DAY,
                0,
                iif(parada_relogio_status_0 = 'ATIVA', parada_relog_0,cast(0 as datetime)) +
                iif(parada_relogio_status_1 = 'ATIVA', parada_relog_1,cast(0 as datetime)) +
                iif(parada_relogio_status_2 = 'ATIVA', parada_relog_2,cast(0 as datetime)) +
                iif(parada_relogio_status_3 = 'ATIVA', parada_relog_3,cast(0 as datetime))) *
             24 +
             DATEPART
               (HOUR,
                iif(parada_relogio_status_0 = 'ATIVA', parada_relog_0, cast(0 as datetime)) +
                iif(parada_relogio_status_1 = 'ATIVA', parada_relog_1, cast(0 as datetime)) +
                iif(parada_relogio_status_2 = 'ATIVA', parada_relog_2, cast(0 as datetime)) +
                iif(parada_relogio_status_3 = 'ATIVA', parada_relog_3, cast(0 as datetime)))  +
          RIGHT
            (convert
               (char(12),
                iif(parada_relogio_status_0 = 'ATIVA', parada_relog_0, cast(0 as datetime)) +
                iif(parada_relogio_status_1 = 'ATIVA', parada_relog_1, cast(0 as datetime)) +
                iif(parada_relogio_status_2 = 'ATIVA', parada_relog_2, cast(0 as datetime)) +
                iif(parada_relogio_status_3 = 'ATIVA', parada_relog_3, cast(0 as datetime))) ,
                114),
             10) as Soma


    • Editado claudiof quarta-feira, 23 de dezembro de 2020 13:55
    quarta-feira, 23 de dezembro de 2020 13:54
  • Estava faltando um fechamento de parênteses antes do Right, e parece que o Cast para Datetime não é necessário:

          convert
            (varchar(10), 
             DATEDIFF
               (DAY, 
                0, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0)) * 
             24 + 
             DATEPART
               (HOUR, 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0))) + 
          RIGHT
            (convert
               (char(12), 
                iif(status_0 = 'ATIVA', relog_0, 0) + 
                iif(status_1 = 'ATIVA', relog_1, 0) + 
                iif(status_2 = 'ATIVA', relog_2, 0) + 
                iif(status_3 = 'ATIVA', relog_3, 0),
                114), 
             10) as Soma

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 19:35
    quarta-feira, 23 de dezembro de 2020 14:07
  • Não foi a mesma não, tem um fechamento de parênteses a mais. Na linha do IIF que antecede a função Right haviam 2 fechamentos de parênteses e na última sugestão são 3, um para a IIF, um para a DatePart e um para a Convert.

    Acompanhe o teste realizado na página abaixo:

    https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=5573130a8b68f60e0e77baf4e1f52440

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 16:01
    quarta-feira, 23 de dezembro de 2020 14:48
  • Acho que você tem que verificar, além do código da consulta, o status de todos os horários. Se tiver algum horário com o status igual a 'ATIVA' e o horário estiver nulo, a soma será nula. Nesse caso, uma alternativa seria verificar o status e se o horário é nulo no IIF. 

    Assinatura: http://www.imoveisemexposicao.com.br

    quarta-feira, 23 de dezembro de 2020 17:39
  • Para verificarmos o que está ocorrendo é melhor você postar um Insert com os dados (status e horário) da(s) linha(s) onde está(ão) ocorrendo o problema, assim como o código da consulta que você está utilizando.

    Já que temos a página no dbfiddle.uk, se você preferir também pode fazer as alterações para acrescentar os dados e o reproduzir o problema lá no site, e depois postar o novo link por aqui.


    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof quarta-feira, 23 de dezembro de 2020 19:54
    quarta-feira, 23 de dezembro de 2020 18:40
  • tentei converter das duas maneiras mão rodou

    ,cast([horatotal] as datetime)
     ,convert(datetime, [horatotal], 104)

    preciso fazer 

    horatotali -  horatotalp
    0:09:59:000 0:00:00:000

    e validar se horatotalp for 0:00:00:000 colocar horatotali

    Mensagem 242, Nível 16, Estado 3, Linha 2
    The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 11:02
    quarta-feira, 23 de dezembro de 2020 19:54
  • HoraTotal é a coluna com o resultado da soma? Se for você tem que fazer os cálculos e comparações antes de converter para varchar. 

    Assinatura: http://www.imoveisemexposicao.com.br

    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 11:02
    quarta-feira, 23 de dezembro de 2020 20:34
  • Claudio,

    Além da sugestão do Gapimex, como a mensagem de erro esta informando que os valores retornados estão fora da faixa reconhecida pelo DateTime, talvez seja o caso de utilizar outros tipo de dados no formato de data, como por exemplo DateTime2 ou DateTimeOffSet.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    domingo, 27 de dezembro de 2020 13:16
  • São resultados de duas colunas onde preciso agora somar, mas ambos estão varchar no banco.

    lembrando que no banco esta assim as colunas, 

    47:17:35:000 30:18:29:000

    e preciso do calculo deste resultado no mesmo formato

    , convert(datetime, [horatotal], 104) - convert(datetime, [horatotalp], 104) as difer

    Mensagem 242, Nível 16, Estado 3, Linha 2
    The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.




    • Editado claudiof segunda-feira, 28 de dezembro de 2020 11:58
    segunda-feira, 28 de dezembro de 2020 11:02
  • tentei usar o vosso modo mas não resolveu
    segunda-feira, 28 de dezembro de 2020 12:28
  • Você não pode armazenar essas colunas utilizando o tipo de dados datetime ou semelhante? E fazer a conversão para varchar somente quando for exibir o resultado?

    Para fazer essa conversão de varchar para datetime de volta seria necessário converter as horas acima de 24 em dias.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 28 de dezembro de 2020 13:48
  • Não consigo criar em outro formato sem sem varchar se não não ira imputar.

    esta testando aqui 

    usar 

     Sum(Left(horatotali,2) * 3600 + substring(horatotali, 4,2) * 60 + substring(horatotali, 7,2)) -
     Sum(Left(horatotalp,2) * 3600 + substring(horatotalp, 4,2) * 60 + substring(horatotalp

    , 7,2)) as diferença

    convert(varchar,(diferenca/86400)) + 'd:' + format(dateadd(ss,diferenca,0),'HH\h:mm\m:ss\s') as teste

    ele funciona para 2 casa no dias,mas para 1,3 e 4 casas em dias da erro. 

    mas tenho campos com 0:09:59:000,253:03:59:000,1953:03:59:000 não funciona, 

    pensei por Split no dia mas não funcionou


    ERRO
    Mensagem 245, Nível 16, Estado 1, Linha 1
    Conversion failed when converting the varchar value '1:' to data type int.


    • Editado claudiof segunda-feira, 28 de dezembro de 2020 14:02
    segunda-feira, 28 de dezembro de 2020 13:56
  • Não tem como armazenar com outro tipo de dados mesmo? Acho que nesses tipos de casos é mais comum converter para segundos ou milisegundos e armazenar em uma coluna do tipo integer ou semelhante, ou utilizando o Datetime como citei antes.

    Armazenando como varchar, alem de ter que separar os valores, é necessário fazer a conversão para integer para depois fazer os cálculos.


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 28 de dezembro de 2020 14:25
  • se eu fazer assim funciona

    convert(bigint, replace([horatotali],':','')) - convert(bigint, replace([horatotalp],':','')) as incidentetotal,

    mas preciso dos separador para ter o resultado em d horas minutos e seg



    • Editado claudiof segunda-feira, 28 de dezembro de 2020 15:03
    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 17:42
    segunda-feira, 28 de dezembro de 2020 14:41
  • me de exemplo fiz da maneira acima e não funcionou

     Sum(Left(horatotali,2) * 3600 + substring(horatotali, 4,2) * 60 + substring(horatotali, 7,2)) -
     Sum(Left(horatotalp,2) * 3600 + substring(horatotalp, 4,2) * 60 + substring(horatotalp

    , 7,2)) as diferença

    convert(varchar,(diferenca/86400)) + 'd:' + format(dateadd(ss,diferenca,0),'HH\h:mm\m:ss\s') as teste

    ele funciona para 2 casa no dias,mas para 1,3 e 4 casas em dias da erro. 

    mas tenho campos com 0:09:59:000,253:03:59:000,1953:03:59:000 não funciona, 

    • Marcado como Resposta claudiof segunda-feira, 28 de dezembro de 2020 17:42
    segunda-feira, 28 de dezembro de 2020 14:49
  • resolvi obrigado a todos.

    usando charindex

    segunda-feira, 28 de dezembro de 2020 17:41
  • Que bom que resolveu.

    Segue uma alternativa para separar os valores utilizando a função Parsename:

    declare @ColunaHoraVarChar varchar(20);
    set @ColunaHoraVarChar = '253:03:59:000';
    select
        PARSENAME(REPLACE(@ColunaHoraVarChar, ':', '.'), 4) as Horas,
        PARSENAME(REPLACE(@ColunaHoraVarChar, ':', '.'), 3) as Minutos,
        PARSENAME(REPLACE(@ColunaHoraVarChar, ':', '.'), 2) as Segundos,
        PARSENAME(REPLACE(@ColunaHoraVarChar, ':', '.'), 1) as Milesimos
    

    Espero que seja útil


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 28 de dezembro de 2020 17:54