【发布时间】:2020-09-21 19:39:17
【问题描述】:
问题是这个查询工作正常:
CREATE TABLE PROCESGEN_TEST
(PROCESENDTIME TIMESTAMP);
INSERT INTO PROCESGEN_TEST
(SELECT DISTINCT PROCESENDTIME FROM dwh_procesgeneriek@xob10
WHERE PROCESENDTIME IS NOT NULL
AND PROCESENDTIME > '10-09-2020 01:00:00');
Def TIME2 = (SELECT MAX_EXEC_TIME FROM EXEC_TIME);
SELECT PROCESENDTIME
FROM PROCESGEN_TEST
WHERE PROCESENDTIME < &TIME2
AND PROCESEINDTIJD IS NOT NULL
在上述情况下,我们首先将数据放入我们使用的数据库管理系统中创建的表中(名为 xor01 而不是 xob10)。在下面的查询中,我们直接从 xob10 中提取数据。当我们想选择一个日期(大于或小于……)并且我们不知道为什么时,这不起作用。
CREATE TABLE EXEC_TIME
(MAX_EXEC_TIME DATE);
INSERT INTO EXEC_TIME
(
SELECT TO_DATE(
TO_CHAR(
MAX(EXEC_DATE),
'DD-MM-YYYY HH24:MI:SS'
),
'DD-MM-YYYY HH24:MI:SS'
) - 1.1666
from L3DD_MIN_ACTIVITIES_BRD_BAK_Will
);
Def TIME3 = (SELECT MAX_EXEC_TIME FROM EXEC_TIME);
SELECT PROCESENDTIME
FROM dwh_procesgeneriek@xob10
WHERE PROCESENDTIME IS NOT NULL
AND TO_DATE(PROCESENDTIME,'DD-MM-YY HH24:MI:SS')
> TO_DATE(&TIME3, 'DD-MM-YY HH24:MI:SS');
问题是查询在最后一个查询中没有找到单个日期并继续执行。如果我们将TO_DATE(&TIME3, 'DD-MM-YY HH24:MI:SS') 替换为某个日期,例如'10-08-2020 20:00:00',则查询将找到正确的日期。我们尝试了各种方法,比如使用TIMESTAMP 格式和TO_TIMESTAMP。没有任何效果。这看起来是一个相当简单的问题。
有谁知道是什么导致了查询在第二个查询中找不到任何日期的问题?
【问题讨论】:
-
你用什么工具来做这个?是sqlplus吗?
-
你为什么要在已经日期的值上使用
to_date()? (也不要使用 YY;使用 YYYY 或者如果你真的必须处理 2 位数的年份,你通常应该使用 RR)。您的插入看起来也不正确。 -
这是你的完整剧本吗?将
&TIME3替换为(SELECT MAX_EXEC_TIME FROM EXEC_TIME)会发生什么?假设这只是一个 SQL Plus/Developer 替换变量,我认为这就是您的工具正在做的事情。 -
我正在使用 Benthic Golden 7 软件。我尝试了这些建议,但没有结果。问题的根源在于数据来自另一个 Oracle(我认为)数据库。 Golden 最近升级到版本 7。可能是 NLS 参数不匹配?