我正在使用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
下面是该列的样本数据。我只需要该列中当前和日期的数据即可。
更新:我认为主要的问题是我无法为源表中的列确定正确的数据类型,并且目前我没有选择确定的数据类型。
而不是尝试将日期隐式转换为字符串并使用TO_DATE( string_value, format_model )
将其转换回,您可以使用TRUNC()
将SYSDATE
截断到一天的开始:
SELECT *
FROM ABC.TEST
WHERE LATEST_CHANGED_DATE >= TRUNC( SYSDATE-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的数字进行比较,以便日复一日地获得正确的输出。
谢谢你!!!!!!!!!!!!!