Usuário com melhor resposta
Somar hora varchar

Pergunta
-
Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
select CAST(LEFT(HoraEnt, 2) + ':' + RIGHT(HoraEnt, 2) as TIME) as HoraEnt, CAST(LEFT(HoraInt, 2) + ':' + RIGHT(HoraInt, 2) as TIME) as HoraInt, CAST(LEFT(HoraRet, 2) + ':' + RIGHT(HoraRet, 2) as TIME) as HoraRet, CAST(LEFT(HoraSai, 2) + ':' + RIGHT(HoraSai, 2) as TIME) as HoraSai, CAST (DATEADD (SECOND, DATEDIFF (SECOND, CAST(LEFT(HoraEnt, 2) + ':' + RIGHT(HoraEnt, 2) as TIME), CAST(LEFT(HoraInt, 2) + ':' + RIGHT(HoraInt, 2) as TIME)) + DATEDIFF (SECOND, CAST(LEFT(HoraRet, 2) + ':' + RIGHT(HoraRet, 2) as TIME), CAST(LEFT(HoraSai, 2) + ':' + RIGHT(HoraSai, 2) as TIME)), 0) as TIME) as HorasTrab from Tabela
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de janeiro de 2014 15:18
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:12
-
Olá
vc precisa converter para segundos e somar os segundos.
Segue abaixo a formula para converter para segundos. A coluna abaixo é do banco adventoreworks. Mas pode ser qualquer coluna tipo date com hora minuto e segundo.
Select MeuModifiedDate = ISNULL((DATEPART(HOUR, CONVERT(DATETIME, ModifiedDate)) * 3600) +
(DATEPART(MINUTE, CONVERT(DATETIME, ModifiedDate)) * 60) + DATEPART(SECOND, CONVERT(DATETIME, ModifiedDate)), 0)
FROM Purchasing.VendorPara voce converter de segundos para Hora-min-seg voce faz o abaixo exemplificado.
declare @hours int, @minutes int, @seconds int, @result nvarchar(20), @TotalSeconds INT
SET @TotalSeconds = 44397
set @hours = @TotalSeconds / 3600
set @minutes = (@TotalSeconds % 3600) / 60
set @seconds = @TotalSeconds % 60
set @result = CONVERT(nvarchar(20),@hours) + ':' + CONVERT(nvarchar(20),@minutes) + ':' +CONVERT(nvarchar(20),@seconds)
SELECT @result
Não sei bem o que você deseja, porem, quando eu precisei, eu utilizei uma tabela temporária, gravei meus dados sumarizados e na saída final do select eu converti de novo para hora-min-seg
espero que te ajude.
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de janeiro de 2014 15:19
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:12
-
Voce precisa converter cada varchar em date e depois realizar a soma..
como eu creio que seu campo possua uma formataçao homogenea, voce pode fazer o seguinte:
DECLARE @tempos varchar(4); DECLARE @tempot datetime; set @tempos='0800'; set @tempot =Convert(datetime,concat(substring(@tempos,1,2),':',substring(@tempos,3,2))); select @tempot ;
Para o calculo, siga a dica deste topico:
http://social.msdn.microsoft.com/Forums/en-US/cac9c12f-e512-4ec5-aaca-f80fd353ab0b/calculo-de-tempo-trabalhado
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de janeiro de 2014 15:18
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:12
-
Diego,
Eu entendo sua situação. Se o seu software for de terceiros, acho que não há muito o que fazer, além de criar "jeitinhos" para poder ter as suas respostas... Mas isso é gambi e o pior sobra pro banco...
Se a aplicação é interna, bota bronca no desenvolvimento para eles arrumarem isso!! Eles podem converter para hora antes de importar pro banco...
Espero ter ajudado!
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:11
-
Diego,
Acho que se uma das colunas estiver em branco vai complicar... acho que não será possível fazer o calculo das horas, vai depender de como deverá ficar o resultado nesses casos.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:11
Todas as Respostas
-
Boa tarde,
Experimente mais ou menos dessa forma:
select CAST(LEFT(HoraEnt, 2) + ':' + RIGHT(HoraEnt, 2) as TIME) as HoraEnt, CAST(LEFT(HoraInt, 2) + ':' + RIGHT(HoraInt, 2) as TIME) as HoraInt, CAST(LEFT(HoraRet, 2) + ':' + RIGHT(HoraRet, 2) as TIME) as HoraRet, CAST(LEFT(HoraSai, 2) + ':' + RIGHT(HoraSai, 2) as TIME) as HoraSai, CAST (DATEADD (SECOND, DATEDIFF (SECOND, CAST(LEFT(HoraEnt, 2) + ':' + RIGHT(HoraEnt, 2) as TIME), CAST(LEFT(HoraInt, 2) + ':' + RIGHT(HoraInt, 2) as TIME)) + DATEDIFF (SECOND, CAST(LEFT(HoraRet, 2) + ':' + RIGHT(HoraRet, 2) as TIME), CAST(LEFT(HoraSai, 2) + ':' + RIGHT(HoraSai, 2) as TIME)), 0) as TIME) as HorasTrab from Tabela
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de janeiro de 2014 15:18
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:12
-
Voce precisa converter cada varchar em date e depois realizar a soma..
como eu creio que seu campo possua uma formataçao homogenea, voce pode fazer o seguinte:
DECLARE @tempos varchar(4); DECLARE @tempot datetime; set @tempos='0800'; set @tempot =Convert(datetime,concat(substring(@tempos,1,2),':',substring(@tempos,3,2))); select @tempot ;
Para o calculo, siga a dica deste topico:
http://social.msdn.microsoft.com/Forums/en-US/cac9c12f-e512-4ec5-aaca-f80fd353ab0b/calculo-de-tempo-trabalhado
William John Adam Trindade
Analyste-programmeur
----------------------------------------------------------
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de janeiro de 2014 15:18
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:12
-
Olá
vc precisa converter para segundos e somar os segundos.
Segue abaixo a formula para converter para segundos. A coluna abaixo é do banco adventoreworks. Mas pode ser qualquer coluna tipo date com hora minuto e segundo.
Select MeuModifiedDate = ISNULL((DATEPART(HOUR, CONVERT(DATETIME, ModifiedDate)) * 3600) +
(DATEPART(MINUTE, CONVERT(DATETIME, ModifiedDate)) * 60) + DATEPART(SECOND, CONVERT(DATETIME, ModifiedDate)), 0)
FROM Purchasing.VendorPara voce converter de segundos para Hora-min-seg voce faz o abaixo exemplificado.
declare @hours int, @minutes int, @seconds int, @result nvarchar(20), @TotalSeconds INT
SET @TotalSeconds = 44397
set @hours = @TotalSeconds / 3600
set @minutes = (@TotalSeconds % 3600) / 60
set @seconds = @TotalSeconds % 60
set @result = CONVERT(nvarchar(20),@hours) + ':' + CONVERT(nvarchar(20),@minutes) + ':' +CONVERT(nvarchar(20),@seconds)
SELECT @result
Não sei bem o que você deseja, porem, quando eu precisei, eu utilizei uma tabela temporária, gravei meus dados sumarizados e na saída final do select eu converti de novo para hora-min-seg
espero que te ajude.
- Sugerido como Resposta Junior Galvão - MVPMVP sábado, 4 de janeiro de 2014 15:19
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:12
-
Diego,
Minha primeira dica seria você mudar de VARCHAR para TIME (se for SQL 2008) o seu tipo de dado.
Feito isso, basta somar e subtrair como você desejar...
Lembre-se de verificar conceitos de bancos de dados... Constraints servem para determinar qual o tipo de dado que o campo terá, use o tipo de dado correto para o dado que ele vai conter... Varchar está totalmente errado neste caso...
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
-
Diego,
Minha primeira dica seria você mudar de VARCHAR para TIME (se for SQL 2008) o seu tipo de dado.
Feito isso, basta somar e subtrair como você desejar...
Lembre-se de verificar conceitos de bancos de dados... Constraints servem para determinar qual o tipo de dado que o campo terá, use o tipo de dado correto para o dado que ele vai conter... Varchar está totalmente errado neste caso...
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
Roberto,
Concordo plenamente com a sua orientação e sugestão.
Mas como respostas, marquei os outros posts, pois estão próximos a necessidade do Diego.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Boa tarde,
Experimente mais ou menos dessa forma:
select CAST(LEFT(HoraEnt, 2) + ':' + RIGHT(HoraEnt, 2) as TIME) as HoraEnt, CAST(LEFT(HoraInt, 2) + ':' + RIGHT(HoraInt, 2) as TIME) as HoraInt, CAST(LEFT(HoraRet, 2) + ':' + RIGHT(HoraRet, 2) as TIME) as HoraRet, CAST(LEFT(HoraSai, 2) + ':' + RIGHT(HoraSai, 2) as TIME) as HoraSai, CAST (DATEADD (SECOND, DATEDIFF (SECOND, CAST(LEFT(HoraEnt, 2) + ':' + RIGHT(HoraEnt, 2) as TIME), CAST(LEFT(HoraInt, 2) + ':' + RIGHT(HoraInt, 2) as TIME)) + DATEDIFF (SECOND, CAST(LEFT(HoraRet, 2) + ':' + RIGHT(HoraRet, 2) as TIME), CAST(LEFT(HoraSai, 2) + ':' + RIGHT(HoraSai, 2) as TIME)), 0) as TIME) as HorasTrab from Tabela
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
Bom dia!!
Eu até cheguei no seu select por aqui porém estou me perdendo na conversão olha o erro:
Conversion failed when converting date and/or time from character string.
-
Diego,
Minha primeira dica seria você mudar de VARCHAR para TIME (se for SQL 2008) o seu tipo de dado.
Feito isso, basta somar e subtrair como você desejar...
Lembre-se de verificar conceitos de bancos de dados... Constraints servem para determinar qual o tipo de dado que o campo terá, use o tipo de dado correto para o dado que ele vai conter... Varchar está totalmente errado neste caso...
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
Roberto,
Concordo plenamente com a sua orientação e sugestão.
Mas como respostas, marquei os outros posts, pois estão próximos a necessidade do Diego.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Bom dia,
Esse pode estar ocorrendo porque existe alguma(s) linha(s) onde as colunas estão nulas, em branco ou com valores inválidos para converter para Time (ex: '1365').
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
-
Bom dia,
Esse pode estar ocorrendo porque existe alguma(s) linha(s) onde as colunas estão nulas, em branco ou com valores inválidos para converter para Time (ex: '1365').
Espero que ajude.
Assinatura: http://www.imoveisemexposicao.com.br
Realmente há colunas em branco que é quando o infeliz não bate ponto e o horário é tipo BR, ou seja, tem 1301, 1800...
Como faria para estes casos?
-
Diego,
Eu entendo sua situação. Se o seu software for de terceiros, acho que não há muito o que fazer, além de criar "jeitinhos" para poder ter as suas respostas... Mas isso é gambi e o pior sobra pro banco...
Se a aplicação é interna, bota bronca no desenvolvimento para eles arrumarem isso!! Eles podem converter para hora antes de importar pro banco...
Espero ter ajudado!
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:11
-
Diego,
Acho que se uma das colunas estiver em branco vai complicar... acho que não será possível fazer o calculo das horas, vai depender de como deverá ficar o resultado nesses casos.
Assinatura: http://www.imoveisemexposicao.com.br
- Marcado como Resposta Giovani Cr sexta-feira, 10 de janeiro de 2014 14:11