none
Somar horas varchar RRS feed

  • Pergunta

  • Olá pessoal!

    Esta é a minha tabela.

    Este é o meu select

    SELECT distinct TOP 1000 
           CONVERT(VARCHAR(100), [DTLogon], 103) AS Date
    	  ,[Agente] AS AGENT
          ,[Acao] AS ACTION
          ,[Numero] AS REASON 
    	  ,[DTLogon] 
          ,[Duracao] AS DURATION
    	  ,CONVERT(VARCHAR(100), [DTLogon], 108) AS HOUR
    
      FROM [Tactium_MIS].[dbo].[T_DetAtivAgt]
      where Acao NOT IN ('Pos-atendimento', 'Receptivo', 'Discando', 'Ativo', 'Logon', 'Logoff')
      AND Agente = 'ALAINE...'
      order by HOUR

    A coluna DURATION é VARCHAR(100) e a HOUR é a conversão (108) da DTLogon.

    O que eu preciso é somar as horas ou minutos da coluna Duration com a coluna Hour para gerar a coluna Retorno.

    Agora como eu faço isso se o Data Type das colunas são diferentes ?


    Douglas Filipe http://douglasfilipe.wordpress.com

    quarta-feira, 20 de fevereiro de 2019 17:30

Respostas

Todas as Respostas

  • Boa tarde,

    Douglas, acho que você pode fazer a conversão da coluna [Duracao] para Time para fazer os cálculos:

    SELECT
        DATEADD
            (SECOND, 
             DATEDIFF(SECOND, 0, cast([Duracao] as time)),
             [DTLogon]) as Retorno,

    Espero que ajude


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

    quarta-feira, 20 de fevereiro de 2019 17:55
  • Deleted
    quinta-feira, 21 de fevereiro de 2019 10:51
  • A coluna DURATION é VARCHAR(100) e a HOUR é a conversão (108) da DTLogon.

    Douglas, se a coluna DURATION armazena um intervalo de tempo, na forma hh:mm:ss, por que a coluna está declarada como varchar(100)? Se ela armazena valores de até 23:59:59, poderia ser declarada como time(0).

    E a coluna DTLogon, como está declarada?

    Procure declarar as colunas da tabela conforme o tipo de dados referente ao conteúdo. No artigo  “Como definir o tamanho de colunas de tamanho variável? você encontra as explicações sobre os impactos negativos em declarar o tamanho de uma coluna string muito acima do tamanho estimado.

    Existe algum motivo para utilizar a cláusula DISTINCT? Se não há, sugiro que a retire, pois geralmente ela aumenta o tempo de processamento.


    José Diz     Belo Horizonte, MG - Brasil     [Linked In]   [e-mail]   [Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    José,

    Concordo com suas observações!!!

    O que me deixa muito preocupado, é que este tipo de cenário a cada dia esta mais comum do que parece, os desenvolvedores, programadores, devops, não tem a menor preocupação em utiliza tipos de dados corretos, mas não porque não sabe ou não querem, é porque na sua grande maioria utilizam ferramentas prontas para criação de estruturas de bancos de dados, o que torna o processo de geração do código mais rápido, mas sem se levar em consideração o dado que será armazenado.


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

    quinta-feira, 21 de fevereiro de 2019 12:11
  • Na real meu negocio é infra, to quebrando um galho pq o dev saiu.

    design tabela

    Este é o design da tabela feito por uma empresa de desenvolvimento. Por isso declarei o varchar(100).

    Com a coluna desta forma fica difícil trabalhar até no SSRS. 


    Douglas Filipe http://douglasfilipe.wordpress.com

    quinta-feira, 21 de fevereiro de 2019 12:18
  • A coluna DURATION é VARCHAR(100) e a HOUR é a conversão (108) da DTLogon.

    Douglas, se a coluna DURATION armazena um intervalo de tempo, na forma hh:mm:ss, por que a coluna está declarada como varchar(100)? Se ela armazena valores de até 23:59:59, poderia ser declarada como time(0).

    E a coluna DTLogon, como está declarada?

    Procure declarar as colunas da tabela conforme o tipo de dados referente ao conteúdo. No artigo  “Como definir o tamanho de colunas de tamanho variável? você encontra as explicações sobre os impactos negativos em declarar o tamanho de uma coluna string muito acima do tamanho estimado.

    Existe algum motivo para utilizar a cláusula DISTINCT? Se não há, sugiro que a retire, pois geralmente ela aumenta o tempo de processamento.


    José Diz     Belo Horizonte, MG - Brasil     [Linked In]   [e-mail]   [Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.
    Uso o distinct pq dou join em outra tabela com os logins dos agentes no AD.

    Douglas Filipe http://douglasfilipe.wordpress.com

    quinta-feira, 21 de fevereiro de 2019 12:41
  • Deleted
    quinta-feira, 21 de fevereiro de 2019 12:51
  • Na real meu negocio é infra, to quebrando um galho pq o dev saiu.

    Douglas, eu já havia acessado teu blog e percebido que os artigos não tinham relação direta com SQL Server.

    A estrutura dessa tabela é um exemplo de como não se deve declarar colunas!  rs

    Além disso, me parece que há informações redundantes, com as colunas Data e Hora contendo a mesma informação que a coluna DTLogon, só que em partes: a data e a hora. É isto mesmo?

    Me parece que a solução proposta pelo "gapimex" atende ao que necessita; por isso que não postei sugestão sobre o que solicita.


    José Diz     Belo Horizonte, MG - Brasil     [Linked In]   [e-mail]   [Porto SQL]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    A realidade aqui é a seguinte:

    Uma implantação de SharePoint com SSRS, ficou pendente este relatório para o Operacional da empresa. Esse banco é de uma URA, desenvolvida por outra empresa, os caras dizem que a tabela é assim e se quiser qualquer alteração tem que solicitar modificação... projeto.. PoC...

    Enfim, unica coisa que preciso é somar a "Duracao" a Hora ou a DTLogon para ter o Retorno


    Douglas Filipe http://douglasfilipe.wordpress.com

    quinta-feira, 21 de fevereiro de 2019 13:10
  • Deleted
    • Marcado como Resposta Douglas Filipe quinta-feira, 21 de fevereiro de 2019 14:27
    quinta-feira, 21 de fevereiro de 2019 14:06
  • Então, vou agradecer de coração a ajuda de todos mas descobri um coisa:

    Microsoft SQL Server 2005 - 9.00.1399.06 (X64) 
    Oct 14 2005 00:35:21 
    Copyright (c) 1988-2005 Microsoft Corporation
    Developer Edition (64-bit) on Windows NT 6.1 (Build 7601: Service Pack 1)

    Msg 243, Level 16, State 1, Line 1
    Type time is not a defined system type.

    Por isso os caras não querem nem ouvir falar nesta tabela.


    Douglas Filipe http://douglasfilipe.wordpress.com

    quinta-feira, 21 de fevereiro de 2019 14:12
  • Douglas, acredito que você pode manter o comando sugerido anteriormente trocando apenas Time para DateTime.

    Espero que ajude


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

    • Marcado como Resposta Douglas Filipe quinta-feira, 21 de fevereiro de 2019 14:27
    quinta-feira, 21 de fevereiro de 2019 14:23
  • Deleted
    quinta-feira, 21 de fevereiro de 2019 14:25
  • Douglas, acredito que você pode manter o comando sugerido anteriormente trocando apenas Time para DateTime.

    Espero que ajude


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

    Funcionou! Muito obrigado!

    Douglas Filipe http://douglasfilipe.wordpress.com

    quinta-feira, 21 de fevereiro de 2019 14:28