BODS作业中的Oracle数据类型列中的日期格式无效

a14dhokn  于 2023-06-29  发布在  Oracle
关注(0)|答案(2)|浏览(153)

我正在使用SAP BODS,并尝试使用SQL查询转换从ORACLE服务器获取数据。现在该表有一个名为latest_changed_date的列,它是一个datetime列。我只需要该表中的昨天和当天数据。现在,由于列是日期时间,我需要将其转换为日期,但当我使用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')

这里我得到了错误:
日期格式图片在转换整个输入字符串之前结束
我也使用了trunc函数,并再次得到:

not a valid month

inconsistent datatypes: expected NUMBER got DATE

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

更新:我认为主要问题是我无法确定源表中列的正确数据类型,目前我没有一个选项来确定。

uz75evzq

uz75evzq1#

你可以使用TRUNC()SYSDATE截短到一天的开始,而不是试图隐式地将日期转换为字符串并使用TO_DATE( string_value, format_model )将它们转换回来:

SELECT *
FROM   ABC.TEST
WHERE  LATEST_CHANGED_DATE >= TRUNC( SYSDATE-1 )
qv7cva1a

qv7cva1a2#

这将起作用:

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的数字进行比较,才能得到昨天之前的一天和一天,并给出正确的输出。
谢谢你!!!!!!!!!!!!!

相关问题