- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 18 anos, 7 meses atrás por
mangueboyrp.
-
AutorPosts
-
31 de julho de 2007 às 10:20 pm #80169
Jota
ParticipanteSou novo, e desculpem por não me apresentar direito
mas estou meio desesperado.Na empresa onde trabalho, usamos tanto com Oracle quanto com SQLServer
Meu dilema é o seguinte,
Em SQL ele está buscando corretamente os dadosJa em Oracle ao fazer a busca ele retorna numero negativo
E como se trata de tempo, não pode ser possível que exista tempo negativo, e mais, ambos os bancos contem os mesmos dados.
Engraçado que quando faço uma busca com uma data antes de 22/05/2007 ele retorna o número corretamente, após essa data ele trás número negativo.
Suponho que ele esteja estourando o campo e não suporta o valor, logo ele deve fazer alguma coisa internamente e retornar um número negativo para compensar.
Gostaria de saber se é isso mesmo, e se possível me sugerirem alguma solução para isso.
Obrigado.[/quote]
1 de agosto de 2007 às 12:34 am #80171mangueboyrp
ParticipanteVc pode postar o select que vc faz no SQL SERVER, tendo em vista que vc está dizendo que o mesmo está trazendo as informações corretas?.
1 de agosto de 2007 às 3:02 pm #80176Jota
Participante[quote=SQL]
SELECT
SUM(DATEDIFF(SS, A.SHIFTDTSTART, A.SHIFTDTEND)) AS TOTALELAPTIMEFROM
VWRESOURCESTATUSEV A INNER JOIN TBLRESOURCESTATUS B WITH ( NOLOCK ) ON A.IDRESOURCESTATUS = B.IDRESOURCESTATUS
LEFT JOIN TBLRESOURCESTATUS J WITH ( NOLOCK ) ON J.IDRESOURCESTATUS = A.IDRESOURCESTATUS
LEFT JOIN TBLRESOURCE E WITH ( NOLOCK ) ON E.IDRESOURCE = A.IDRESOURCE
WHERE
A.IDPLANT = 1 AND A.IDAREA = 12 AND A.IDSECTOR = 107 AND A.DTPROD = ‘2007-05-21’
AND A.DTPROD BETWEEN ‘2007-05-01’ AND ‘2007-05-22’
AND A.FLGVIRTUALREG = 0
[/quote][quote=Oracle]
SELECT
SUM(PCFDATEDIFF( A.SHIFTDTSTART, A.SHIFTDTEND )) AS TOTALELAPTIMEFROM
VWRESOURCESTATUSEV A INNER JOIN TBLRESOURCESTATUS B ON A.IDRESOURCESTATUS = B.IDRESOURCESTATUS
LEFT JOIN TBLRESOURCESTATUS J ON J.IDRESOURCESTATUS = A.IDRESOURCESTATUS
LEFT JOIN TBLRESOURCE E ON E.IDRESOURCE = A.IDRESOURCE
WHERE
A.IDPLANT = 1 AND A.IDAREA = 12 AND A.IDSECTOR = 107 AND A.DTPROD = TO_DATE(‘2007-05-21’, ‘YYYY-MM-DD’)
AND A.DTPROD BETWEEN ’01-05-2007′ AND ’22-05-2007′
AND A.FLGVIRTUALREG = 0
[/quote]
Essa função PCFDATEDIFF foi criada internamente na empresa para fazer a diferença entre as datas e converter para segundos1 de agosto de 2007 às 11:42 pm #80185mangueboyrp
ParticipanteBoa Tarde, Amigo.
Tente fazer desse jeito para ver se dá certo:[quote=Oracle]
SELECT
SUM(TO_NUMBER(TO_CHAR(A.SHIFTDTSTART,’SSSSS’)) – TO_NUMBER(TO_CHAR(A.SHIFTDTEND,’SSSSS’)))AS TOTALELAPTIMEFROM
VWRESOURCESTATUSEV A INNER JOIN TBLRESOURCESTATUS B ON A.IDRESOURCESTATUS = B.IDRESOURCESTATUS
LEFT JOIN TBLRESOURCESTATUS J ON J.IDRESOURCESTATUS = A.IDRESOURCESTATUS
LEFT JOIN TBLRESOURCE E ON E.IDRESOURCE = A.IDRESOURCE
WHERE
A.IDPLANT = 1 AND A.IDAREA = 12 AND A.IDSECTOR = 107 AND A.DTPROD = TO_DATE(‘2007-05-21’, ‘YYYY-MM-DD’)
AND A.DTPROD BETWEEN ’01-05-2007′ AND ’22-05-2007′
AND A.FLGVIRTUALREG = 0
[/quote] -
AutorPosts
- Você deve fazer login para responder a este tópico.