Usuário com melhor resposta
Conversão de HORA

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
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!
- Marcado como Resposta Gustavo M. Guimarães segunda-feira, 10 de dezembro de 2012 14:30
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/
-
-
-
-
-
-
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
-
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
- Sugerido como Resposta Advaldo Mesquita Moreira Junior quarta-feira, 7 de novembro de 2012 17:44
-
-
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
-
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 dataLuciana Sampaio http://lucianasampaio.wordpress.com/
-
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'.
-
-
-
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
-
-
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
-
-
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
-
-
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
- Editado Advaldo Mesquita Moreira Junior sexta-feira, 9 de novembro de 2012 18:38 Complementando o texto
-
-
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!
- Marcado como Resposta Gustavo M. Guimarães segunda-feira, 10 de dezembro de 2012 14:30