none
Conversão de HORA RRS feed

  • Pergunta

  • Olá pessoal, estou com uma dificuldade em gerar um relatório, o meu relatório está buscando no BD 'voo_trab.hora" a e o formato de hora que está aparecendo é: '21,20; 6,07 e 0,12'.

    Acontece que preciso desta informação no formato de 24h, tipo 11:45 ou 21:15.

    Algum sabe o que deve ser feito?

    Segue a linha de comando:

    SELECT TABELA.CLASSE, SERV_TRA.DT_VOO, voo_trab.HORA, SERV_TRA.CIA, TABELA.DESC_RESUM, SERV_TRA.QTE, SERV_TRA.VOO, SERV_TRA.COD_CLS, SERV_TRA.COD_SVC, SERV_TRA.VL_UNIT, TABELA.DESCRICAO, TABELA.UN, TABELA.VL_UNIT, TABELA.COD_SVC_CL, TABELA.COD_SVC, TABELA.TIPO_SVC, CIA.NOME_RESUM, voo_trab.TRECHO, voo_trab.VOO, voo_trab.COBRAR, voo_trab.CIA, voo_trab.DT_VOO, voo_trab.IDENT, voo_trab.STATUS
    FROM CIA CIA, SERV_TRA SERV_TRA, TABELA TABELA, voo_trab voo_trab
    WHERE SERV_TRA.COBRAR = voo_trab.COBRAR AND SERV_TRA.CIA = voo_trab.CIA AND SERV_TRA.DT_VOO = voo_trab.DT_VOO AND SERV_TRA.IDENT = voo_trab.IDENT AND SERV_TRA.STATUS = voo_trab.STATUS AND SERV_TRA.VOO = voo_trab.VOO AND SERV_TRA.TRECHO = voo_trab.TRECHO AND SERV_TRA.CIA = TABELA.CIA AND SERV_TRA.COD_SVC = TABELA.COD_SVC AND SERV_TRA.CIA = CIA.CIA

    terça-feira, 6 de novembro de 2012 17:52

Respostas

  • Onde esta colocando esta estrutura? No RP?

    Se sim, coloque somente em uma linha, deste modo:

    , (RIGHT('00' + CONVERT(varchar(2),FLOOR(voo_trab.HORA)),2) +':' + RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60))),2) +':' + RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)-FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)))*60),2)) as voo_trab

    Lembre-se, somente este conjunto!

    sexta-feira, 9 de novembro de 2012 18:57

Todas as Respostas

  • Qual o formato deste campo? float? 

    Vc vai precisar usar o convert.Neste link tem uma série de exemplos:

    http://forum.imasters.com.br/topic/224454-manipulando-data-no-sql-server-conteudo-alterado/

    []´s

    terça-feira, 6 de novembro de 2012 17:56
  • Valeu Advaldo, porém as dicas são voltadas para converter data e o meu problema é em conveter horas.

    terça-feira, 6 de novembro de 2012 18:05
  • tinha um item:

    select CONVERT(VARCHAR(12),GETDATE(),108) AS '108', --hh:mi:ss

    eu não sei que formato é seu campo para aparecer 21,20... é assim mesmo ou seria 21:20

    []´s

    terça-feira, 6 de novembro de 2012 18:27
  • Acredito que o formato que os dados estão aparecendo estejam em decimal, e estou querendo converter para o formato HH:MM.
    quarta-feira, 7 de novembro de 2012 10:21
  • Ramarion,

    Qual o tipo de dados da sua coluna?!


    quarta-feira, 7 de novembro de 2012 11:05
  • É decimal

    quarta-feira, 7 de novembro de 2012 11:17
  • Bom dia,

    Confirma uma coisa..., se o valor da coluna for 21,50, o correto seria exibir 21:30 (21 horas e 30 minutos)?


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

    quarta-feira, 7 de novembro de 2012 12:39
  • DECLARE @hours decimal(15,4)
    SELECT @hours = 21.50
    SELECT    RIGHT('00' + CONVERT(varchar(2),FLOOR(@hours)),2)
    	+':'
    	+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((@hours-FLOOR(@hours))*60))),2)
    	+':'
    	+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((@hours-FLOOR(@hours))*60)-FLOOR(((@hours-FLOOR(@hours))*60)))*60),2)
    
    
    declare @Hours decimal (6, 4)
    set	@Hours = 21.50
    select	dateadd(minute, @Hours * 60, 0)

    Já vi estes dois modos, mas deve ter um modo mais "nativo" de se fazer.

    Abçs

    quarta-feira, 7 de novembro de 2012 13:18
  • Gapimex, boa tarde

    Extamente, 21,50 quer dizer 21:30.

    quarta-feira, 7 de novembro de 2012 16:57
  • Boa tarde,

    Acho que você poderia utilizar as sugestões postadas pelo Advaldo.

    Eu particularmente optaria pela sugestão com o DateAdd, adicionando a função Convert ou Cast se for necessário formatar o resultado.

    Espero que ajude.


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

    quarta-feira, 7 de novembro de 2012 17:33
  • Boa tarde,

    Tenho como exemplo essas functions

    DATEADD (parte, numero, data) = adiciona um valor a parte de uma data
    DATEDIFF (parte, data inicial, data final) = subtrai a data inicial da data final, indicando o resultado na unidade definida em “parte”
    GETDATE() = retorna a data atual do sistema
    DATENAME (parte, data) = retorna o nome da parte de uma data
    DATEPART(parte, data) = retorna a parte de uma data


    Luciana Sampaio http://lucianasampaio.wordpress.com/

    quarta-feira, 7 de novembro de 2012 18:01
  • Advaldo, revisei melhor o BD e o valor é como você moestrou , 21,2 é o mesmo que 21:20. Tentei a linha select CONVERT(VARCHAR(12),GETDATE(),108) AS '108', --hh:mi:ss porém retornou "erro de sintaxe (operador faltando) na expressão de consulta '--hh:mi:ss'.
    sexta-feira, 9 de novembro de 2012 15:47
  • Ramarion, 

    Tem uma virgula antes do comentario!

     select CONVERT(VARCHAR(12),GETDATE(),108) AS '108'

    Não esqueça de marcar as respostas que lhe forem úteis.

    []´s

    sexta-feira, 9 de novembro de 2012 16:15
  • Agora retornou "Função Convert indefinida na expressão".
    sexta-feira, 9 de novembro de 2012 17:04
  • Tendo em vista que é somente o campo voo_trab.HORA:

    SELECT TABELA.CLASSE
    , SERV_TRA.DT_VOO
    , convert(VARCHAR(12),voo_trab.HORA,108) as voo_trab
    , SERV_TRA.CIA
    , TABELA.DESC_RESUM
    , SERV_TRA.QTE
    , SERV_TRA.VOO
    , SERV_TRA.COD_CLS
    , SERV_TRA.COD_SVC
    , SERV_TRA.VL_UNIT
    , TABELA.DESCRICAO
    , TABELA.UN
    , TABELA.VL_UNIT
    , TABELA.COD_SVC_CL
    , TABELA.COD_SVC
    , TABELA.TIPO_SVC
    , CIA.NOME_RESUM
    , voo_trab.TRECHO
    , voo_trab.VOO
    , voo_trab.COBRAR
    , voo_trab.CIA
    , voo_trab.DT_VOO
    , voo_trab.IDENT
    , voo_trab.STATUS
    FROM CIA CIA, SERV_TRA SERV_TRA, TABELA TABELA, voo_trab voo_trab
    WHERE SERV_TRA.COBRAR = voo_trab.COBRAR 
    	AND SERV_TRA.CIA = voo_trab.CIA 
    	AND SERV_TRA.DT_VOO = voo_trab.DT_VOO 
    	AND SERV_TRA.IDENT = voo_trab.IDENT 
    	AND SERV_TRA.STATUS = voo_trab.STATUS 
    	AND SERV_TRA.VOO = voo_trab.VOO 
    	AND SERV_TRA.TRECHO = voo_trab.TRECHO 
    	AND SERV_TRA.CIA = TABELA.CIA 
    	AND SERV_TRA.COD_SVC = TABELA.COD_SVC 
    	AND SERV_TRA.CIA = CIA.CIA
    


    sexta-feira, 9 de novembro de 2012 17:22
  • Coloquei para rodar a consulta e retornou o mesmo erro "Função Convert indefinida na expressão".


    • Editado Ramarion sexta-feira, 9 de novembro de 2012 17:31
    sexta-feira, 9 de novembro de 2012 17:29
  • Falha minha.

    Diretamente convertendo para 108 não vai de decimal.

    Deste modo dá certo:

    SELECT TABELA.CLASSE
    , SERV_TRA.DT_VOO
    -- , convert(VARCHAR(12),voo_trab.HORA,108) as voo_trab
    (RIGHT('00' + CONVERT(varchar(2),FLOOR(voo_trab.HORA)),2)
    	+':'
    	+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60))),2)
    	+':'
    	+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)-FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)))*60),2)) as voo_trab
    , SERV_TRA.CIA
    , TABELA.DESC_RESUM
    , SERV_TRA.QTE
    , SERV_TRA.VOO
    , SERV_TRA.COD_CLS
    , SERV_TRA.COD_SVC
    , SERV_TRA.VL_UNIT
    , TABELA.DESCRICAO
    , TABELA.UN
    , TABELA.VL_UNIT
    , TABELA.COD_SVC_CL
    , TABELA.COD_SVC
    , TABELA.TIPO_SVC
    , CIA.NOME_RESUM
    , voo_trab.TRECHO
    , voo_trab.VOO
    , voo_trab.COBRAR
    , voo_trab.CIA
    , voo_trab.DT_VOO
    , voo_trab.IDENT
    , voo_trab.STATUS
    FROM CIA CIA, SERV_TRA SERV_TRA, TABELA TABELA, voo_trab voo_trab
    WHERE SERV_TRA.COBRAR = voo_trab.COBRAR 
    	AND SERV_TRA.CIA = voo_trab.CIA 
    	AND SERV_TRA.DT_VOO = voo_trab.DT_VOO 
    	AND SERV_TRA.IDENT = voo_trab.IDENT 
    	AND SERV_TRA.STATUS = voo_trab.STATUS 
    	AND SERV_TRA.VOO = voo_trab.VOO 
    	AND SERV_TRA.TRECHO = voo_trab.TRECHO 
    	AND SERV_TRA.CIA = TABELA.CIA 
    	AND SERV_TRA.COD_SVC = TABELA.COD_SVC 
    	AND SERV_TRA.CIA = CIA.CIA
    

    []´s

    sexta-feira, 9 de novembro de 2012 17:46
  • Mudou o erro: 'expressão incorreta na coluna: 'serv_tra.dt_voo -'.
    sexta-feira, 9 de novembro de 2012 18:02
  • Faltou uma virgula láááá no começo da sintaxe do 

    (RIGHT('00' + CONVERT(varchar(2),FLOOR(voo_trab.HORA)),2) +':' + RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60))),2) +':' + RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)-FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)))*60),2)) as voo_trab

    Põe uma virgula neste começo

    sexta-feira, 9 de novembro de 2012 18:05
  • Advaldo, mesmo erro!!

    sexta-feira, 9 de novembro de 2012 18:30
  • Testei por aqui em uma estrutura de teste e rodou:

    SELECT TABELA.CLASSE
    , SERV_TRA.DT_VOO
    , (RIGHT('00' + CONVERT(varchar(2),FLOOR(voo_trab.HORA)),2)
    	+':'
    	+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60))),2)
    	+':'
    	+ RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)-FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)))*60),2)) as voo_trab
    , SERV_TRA.CIA
    , TABELA.DESC_RESUM
    , SERV_TRA.QTE
    , SERV_TRA.VOO
    , SERV_TRA.COD_CLS
    , SERV_TRA.COD_SVC
    , SERV_TRA.VL_UNIT
    , TABELA.DESCRICAO
    , TABELA.UN
    , TABELA.VL_UNIT
    , TABELA.COD_SVC_CL
    , TABELA.COD_SVC
    , TABELA.TIPO_SVC
    , CIA.NOME_RESUM
    , voo_trab.TRECHO
    , voo_trab.VOO
    , voo_trab.COBRAR
    , voo_trab.CIA
    , voo_trab.DT_VOO
    , voo_trab.IDENT
    , voo_trab.STATUS
    FROM CIA CIA, SERV_TRA SERV_TRA, TABELA TABELA, voo_trab voo_trab
    WHERE SERV_TRA.COBRAR = voo_trab.COBRAR 
    	AND SERV_TRA.CIA = voo_trab.CIA 
    	AND SERV_TRA.DT_VOO = voo_trab.DT_VOO 
    	AND SERV_TRA.IDENT = voo_trab.IDENT 
    	AND SERV_TRA.STATUS = voo_trab.STATUS 
    	AND SERV_TRA.VOO = voo_trab.VOO 
    	AND SERV_TRA.TRECHO = voo_trab.TRECHO 
    	AND SERV_TRA.CIA = TABELA.CIA 
    	AND SERV_TRA.COD_SVC = TABELA.COD_SVC 
    	AND SERV_TRA.CIA = CIA.CIA

    De uma verificada, se de repente, não ficou algum campo de fora no where.

    Se der erro, me passe o select que esta utilizando.

    []´s


    sexta-feira, 9 de novembro de 2012 18:37
  • Copiei e colei a tua estrutura sugerida, deu outro erro
    sexta-feira, 9 de novembro de 2012 18:46
  • Onde esta colocando esta estrutura? No RP?

    Se sim, coloque somente em uma linha, deste modo:

    , (RIGHT('00' + CONVERT(varchar(2),FLOOR(voo_trab.HORA)),2) +':' + RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60))),2) +':' + RIGHT('00' + CONVERT(varchar(2),FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)-FLOOR(((voo_trab.HORA-FLOOR(voo_trab.HORA))*60)))*60),2)) as voo_trab

    Lembre-se, somente este conjunto!

    sexta-feira, 9 de novembro de 2012 18:57