Converter decimal em hora – Parte 1
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/