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

问题描述 投票:0回答:2

我正在使用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')

这里出现错误:

date format picture ends before converting entire input string

我也使用了trunc函数,然后又得到了一个:

not a valid month

inconsistent datatypes: expected NUMBER got DATE

下面是该列的样本数据。我只需要该列中当前和日期的数据即可。

enter image description here

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

oracle datetime sap etl sap-data-services
2个回答
2
投票

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

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

-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的数字进行比较,以便日复一日地获得正确的输出。

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

© www.soinside.com 2019 - 2024. All rights reserved.