0

我正在使用 SAP BODS,我正在尝试使用 SQL 查询转换从 ORACLE 服务器获取数据。现在该表有一个名为 latest_changed_date 的列,它是一个日期时间列。我只想要该表中昨天和当天的数据。现在由于该列是日期时间,我需要将其转换为日期,但是当我使用 to_date 函数时,出现以下错误。

SELECT *
FROM ABC.TEST
WHERE TO_DATE(LATEST_CHANGED_DATE) = TO_DATE(SYSDATE-1)

数据库错误消息是

ORA-01843: 无效的月份

我尝试在 TO_DATE 条件下给出日期格式,如下所示:

SELECT *
FROM ABC.TEST
WHERE TO_DATE(LATEST_CHANGED_DATE,'YYYY-MM-DD') >= TO_DATE(SYSDATE-1,'YYYY-MM-DD')

在这里我得到了错误:

date format picture ends before converting entire input string

我也使用了 trunc 函数并再次得到:

not a valid month

或者

inconsistent datatypes: expected NUMBER got DATE

下面是该列的示例数据。我只需要列中数据的当前和前一天的数据。

在此处输入图像描述

更新:我认为主要问题是我无法为源表中的列确定正确的数据类型,目前我无法确定这一点。

4

2 回答 2

2

与其尝试将日期隐式转换为字符串并将它们转换回来,不如使用TO_DATE( string_value, format_model )您可以TRUNC()截断SYSDATE到一天的开始:

SELECT *
FROM   ABC.TEST
WHERE  LATEST_CHANGED_DATE >= TRUNC( SYSDATE-1 )
于 2018-12-03T12:19:56.300 回答
-1

这将起作用:

SELECT *
FROM ABC.TEST
where sysdate-LATEST_CHANGED_DATE<=sysdate-(sysdate-2);

例如采取这个:

ALTER SESSION SET NLS_DATE_FORMAT = ' DD-MON-YYYY HH24:MI:SS';
SELECT * FROM d061_dates ;

 03-DEC-2018 17:44:38
 25-AUG-2018 17:44:42
 30-AUG-2018 17:44:46
 01-DEC-2018 17:44:49
 02-DEC-2018 17:46:31

SELECT * FROM d061_dates
where sysdate-a<=sysdate-(sysdate-2);

 03-DEC-2018 17:44:38
 02-DEC-2018 17:46:31

你必须在两边都减去 sysdate 才能通过一个小于等于 2 的数字进行比较,以获得前天和前天,并给出正确的输出。

谢谢你!!!!!!!!!!!!!

于 2018-12-03T12:35:07.353 回答