我有这个查询
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)运行相同的查询时
我得到了第一行
有趣的是: a)为什么在不同环境中执行时会返回不同的结果(尽管运行查询的服务器是同一台服务器)? b)。为什么不在条款之间不返回预期的结果?
答案 0 :(得分:3)
我不知道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)
答案 1 :(得分:0)
试
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)
");