Arquivo

Archive for setembro \26\UTC 2014

Converter decimal em hora – Parte 1

26 de setembro de 2014 Deixe um comentário

Usando o Microsoft SQL Server procurei uma função para converter um decimal em horas.

Então o caminho padrão seria usar o CAST ou Convert, porém não é possível converter um decimal diretamente para tipo data/hora, conforme gráfico abaixo:

fonte: http://technet.microsoft.com/en-us/library/ms187928(v=sql.100).aspx

 

O problema:

 

Temos um valor = 10 horas trabalhadas

Calculando 25% das 10 horas o resultado é 2.5 horas, ou seja, duas horas e meia.

Aqui está nosso problema 2.5 é um decimal e desejamos sua representação em horas:minutos, logo o resultado final deve ser 2:30.

 

O que fazer?

 

Resposta 1:

Como esse número é apresentado em Data/Hora?
O retorno da conversão direta é 12:00, sendo que o esperado é 02:30

select CONVERT(SMALLDATETIME, 2.50)

 

Quanto 2,50 representa de 1 dia, ou seja, 24 horas?
O retorno é 0.104166

select 2.50/24

 

Como esse é o novo número apresentado em Data/Hora?
O retorno da conversão é 02:30, conforme desejado.
Porém o veio a data 1900-01-01

select CONVERT(SMALLDATETIME, 2.50/24)

 

Com extrair somente a hora:minuto:segundo?

SELECT CONVERT(NVARCHAR,
                                                CONVERT(SMALLDATETIME, 2.50/24)
                            , 108)

 

Quando informado o 108, para converte o SmallDateTime para NVARCHAR.
Estamos indicando o Style, indicado na sintaxe de Remarks
Conforme descrito em http://technet.microsoft.com/en-us/library/ms187928(v=sql.100).aspx

 

Créditos:

http://www.scriptbrasil.com.br/forum/topic/168005-resolvido-converter-decimal-para-hora/