SUBTRAÇÃO DE 2CAMPOS DATETIME
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
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
Lucasalves
Curtidas 0
Respostas
Signori
28/01/2009
Não seria melhor e mais prático fazer isso via programação? Qual ferramenta vc utiliza?
GOSTEI 0
Rprado
28/01/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
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
GOSTEI 0
Gustavobretas
28/01/2009
LucasAlves, uma forma de vc ignorar os milesegundos é +/- assim:
ou seja, vc controla até onde quer considerar pelo nº de caracter! 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!
SELECT CONVERT(DATETIME, CONVERT(VARCHAR(19), GETDATE(), 120))
ou seja, vc controla até onde quer considerar pelo nº de caracter!
VARCHAR(19)
espero ter ajudado!
um abraço!
GOSTEI 0