Array
(
)

SUBTRAÇÃO DE 2CAMPOS DATETIME

Lucasalves
   - 28 jan 2009

Boa tarde a todos, como este é o meu primeiro tópico caso haja alguma coisa que eu tenha feito errado por favor me avisem para que eu arrume ok ^^

La vai ...

Eu tenho uma tabela com o nome PRODUTIVIDADE_PRODUCAO, eu tenho 2 campos datetime nesta tabela que são:

HORA_INI_PRODUTIVIDADE_PRODUCAO ex(2008-08-22 14:42:16.083)
HORA_FIM_PRODUTIVIDADE_PRODUCAO ex(2008-08-22 10:07:40.680)

eu preciso fazer um campo menos o outro desconciderando os milesimos de segundo...

Será que alguem poderia me ajudar, eu ja tentei de todo jeito mas não consegui... abaixo segue minhas ultima tentativa:

SELECT DISTINCT COD_CEN_CADCEN, DESCR_CEN_CADCEN, DESCR_TABCAR, HORA_FIM_PRODUTIVIDADE_PRODUCAO,

HORA_INI_PRODUTIVIDADE_PRODUCAO, (SELECT TOP 1 ((convert(varchar(23),(DATEDIFF(YEAR, HORA_INI_PRODUTIVIDADE_PRODUCAO, HORA_FIM_PRODUTIVIDADE_PRODUCAO)))) + ´-´ +

(convert(varchar(23),(DATEDIFF(MONTH, HORA_INI_PRODUTIVIDADE_PRODUCAO, HORA_FIM_PRODUTIVIDADE_PRODUCAO)))) + ´-´ +

(convert(varchar(23),(DATEDIFF(DAY, HORA_INI_PRODUTIVIDADE_PRODUCAO, HORA_FIM_PRODUTIVIDADE_PRODUCAO)))) + ´ ´ +

(convert(varchar(23),(DATEDIFF(HOUR, HORA_INI_PRODUTIVIDADE_PRODUCAO, HORA_FIM_PRODUTIVIDADE_PRODUCAO)))) + ´:´ +

(convert(varchar(23),(DATEDIFF(MINUTE, HORA_INI_PRODUTIVIDADE_PRODUCAO, HORA_FIM_PRODUTIVIDADE_PRODUCAO)))) + ´:´ +

(convert(varchar(23),(DATEDIFF(SECOND, HORA_INI_PRODUTIVIDADE_PRODUCAO, HORA_FIM_PRODUTIVIDADE_PRODUCAO)))))) DIFERENCA_TOTAL, NUM_PESS_PRODUTIVIDADE_PRODUCAO, QUANTIDADE_PRODUZIDA

FROM CADCEN, TABCAR, PRODUTIVIDADE_PRODUCAO
WHERE DATA_PRODUTIVIDADE_PRODUCAO >= 20080815 AND DATA_PRODUTIVIDADE_PRODUCAO <= 20080821
AND COD_CEN_CADCEN >= 60002
AND COD_CEN_CADCEN <= 60003
AND SERVICO_PRODUTIVIDADE_PRODUCAO = COD_TABCAR
AND LOCAL_PRODUTIVIDADE_PRODUCAO = COD_CEN_CADCEN

só que ele retorna uns valores estranhos para minuto e segundo
exemplo:

HORA FINAL HORA INICIAL
2008-10-30 12:15:00.0002008-10-30 10:33:23.950

UM MENOS O OUTRO
0-0-0 2:102:6097

FICAREI GRATO SE ALGUEM CONSEGUIR ME AJUDAR

ATENCIOSAMENTE
LUCAS ALVES

Signori
   - 26 fev 2009

Não seria melhor e mais prático fazer isso via programação? Qual ferramenta vc utiliza?

Rprado
   - 09 mar 2009

Amigo

Vc pode fazer datafinal - datainicial e usar apenas fazer um substring para pegar as horas, porém se passar de 24 horas vai precisar fazer um esquema diferente

Abraço

Gustavobretas
   - 09 mar 2009

LucasAlves, uma forma de vc ignorar os milesegundos é +/- assim:
#Código

SELECT CONVERT(DATETIME, CONVERT(VARCHAR(19), GETDATE(), 120))

ou seja, vc controla até onde quer considerar pelo nº de caracter! #Código
VARCHAR(19)
se vc colocar somente 10, vai pegar só a data ano dia mês, da uma olhada no help essa função CONVERT!

espero ter ajudado!

um abraço!