Запрос Oracle не возвращает ожидаемых результатов - и другой результат при выполнении через связанный сервер SQL - PullRequest
0 голосов
/ 03 марта 2012

У меня есть этот запрос

select * from openQuery(hades,"select to_char(T$STDT,'dd-Mon-YYYY') stdt,to_char(T$TDAT,'dd-Mon-YYYY') tdat
    ,fdG2J(T$TDAT)-fdG2J(t$stdt) diff,T$DISC 
    ,fdG2J(Sysdate) nSysD
    ,fdG2J(t$stdt) nStdt
    ,fdg2J(t$tdat) nTdat
    from BAAN.TTDSLS031020 
where T$CUNO='000022' and TRIM(T$CPGS)='1AA00'
--and fdG2J(sysdate) between fdG2J(t$stdt) and fdG2J(t$stdt) 
");

и он возвращает следующий результат (за исключением того, что последняя строка предложения where закомментирована).

STDT        TDAT        DIFF        T$DISC  NSYSD   NSTDT   NTDAT
01-Mar-12   11-Mar-12   10010       40  2455990063  2455988061  2455998071
02-Mar-12   02-Mar-12   0           50  2455990063  2455989062  2455989062
06-Mar-12   11-Mar-12   5005        60  2455990063  2455993066  2455998071
11-Mar-12   11-Mar-12   0           70  2455990063  2455998071  2455998071
18-Jul-39   01-Jan-12   2907496166  80  2455990063  2465988199  5373484365
15-Dec-85   01-Jan-12   2817496016  80  2455990063  2555988349  5373484365

и где я применяюмежду комментариями, запрос не возвращает результатов (через связанный сервер sql2008)

, и когда я запускаю тот же запрос из Sql Developer (Oracle)

, я получаю первую строку

Что интересно: а) почему это возвращает разные результаты при выполнении в разных средах (хотя сервер, выполняющий запрос, является одним и тем же сервером)?б). почему между пунктами не возвращается ожидаемый результат?

Ответы [ 2 ]

3 голосов
/ 03 марта 2012

Я не знаю функциональности с отступом fdG2J(), но в предложении BETWEEN вы используете один и тот же вызов функции и значение аргумента для обоих. Следовательно, оба возвращают одно и то же значение, и fdG2J(sysdate) должно быть точно равно, а не между точками диапазона.

and fdG2J(sysdate) between fdG2J(t$stdt) and fdG2J(t$stdt) 
-- -                            ^^^^^^^^  Same as ^^^^^^^^

Возможно, вы намеревались:

and fdG2J(sysdate) between fdG2J(t$stdt) and fdG2J(T$TDAT) 
0 голосов
/ 03 марта 2012

1001 * попробовать *

select * from openQuery(hades,"select to_char(T$STDT,'dd-Mon-YYYY') stdt,to_char(T$TDAT,'dd-Mon-YYYY') tdat
    ,fdG2J(T$TDAT)-fdG2J(t$stdt) diff,T$DISC 
    ,fdG2J(Sysdate) nSysD
    ,fdG2J(t$stdt) nStdt
    ,fdg2J(t$tdat) nTdat
    from BAAN.TTDSLS031020 
where T$CUNO='000022' and TRIM(T$CPGS)='1AA00'
and fdG2J(sysdate) between fdG2J(t$stdt) and fdG2J(T$TDAT) 
");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...