查询时,oracle中的有效月份语句不是

时间:2017-04-07 18:11:17

标签: oracle

我需要帮助来解决“非有效月份”问题。语句和查询下方与MAX函数完美配合..

SELECT MAX( Y.FILE_SUB_RET_DATE_TIME ) FROM ADPDBA.WORK_REQUEST_FILE_TRANS_AUDIT Y WHERE Y.FILE_EVENT_TYPE = 'SUBMISSION' AND 
   Y.FILE_SUBMT_RETRL_STATUS = 'LEVEL1 POSTED' AND Y.FILE_SUB_RET_DATE_TIME >= '01-DEC-2015' AND Y.FILE_SUB_RET_DATE_TIME <= '03-FEB-2017'
GROUP BY Y.WR_FILE_TRANS_INFO_ID 

输出如下......

12/11/2015 1:44:33 PM
2/2/2017 3:42:02 PM
2/2/2017 3:42:02 PM

现在我需要重写没有MAX功能的查询,这些是我在下面准备的查询。但两者都显示“不是有效的月份”。声明..

SELECT X.WR_FILE_TRANS_AUDIT_ID FROM ADPDBA.WORK_REQUEST_FILE_TRANS_AUDIT X WHERE X.FILE_SUB_RET_DATE_TIME IN
 ('20170202034202','20170202034202','20151211014433')

 SELECT X.WR_FILE_TRANS_AUDIT_ID FROM ADPDBA.WORK_REQUEST_FILE_TRANS_AUDIT X WHERE X.FILE_SUB_RET_DATE_TIME IN
 ('2017-02-02 03:42:02.0','2017-02-02 03:42:02.0','2015-12-11 01:44:33.0') 

请帮我摆脱这个错误...

1 个答案:

答案 0 :(得分:1)

我认为您的问题是您的日期格式。对于日期列,Oracle将尝试根据NLS默认设置转换为日期。对于您的SQL,让我们更具体一点,并告诉Oracle如何解释日期字符串,如...

(假设为DATE数据类型)

SELECT X.WR_FILE_TRANS_AUDIT_ID 
FROM ADPDBA.WORK_REQUEST_FILE_TRANS_AUDIT X 
WHERE X.FILE_SUB_RET_DATE_TIME IN
      (TO_DATE('2017-02-02 03:42:02', 'YYYY-MM-DD HH24:MI:SS'),
       TO_DATE('2017-02-02 03:42:02', 'YYYY-MM-DD HH24:MI:SS'),
       TO_DATE('2015-12-11 01:44:33', 'YYYY-MM-DD HH24:MI:SS')
      );

..或者我刚看到你对TIMESTAMP专栏的评论

SELECT X.WR_FILE_TRANS_AUDIT_ID 
FROM ADPDBA.WORK_REQUEST_FILE_TRANS_AUDIT X 
WHERE X.FILE_SUB_RET_DATE_TIME IN
      (TO_TIMESTAMP ('2017-02-02 03:42:02', 'YYYY-MM-DD HH24:MI:SS'),
       TO_TIMESTAMP ('2017-02-02 03:42:02', 'YYYY-MM-DD HH24:MI:SS'),
       TO_TIMESTAMP ('2015-12-11 01:44:33', 'YYYY-MM-DD HH24:MI:SS')
      );