Oracle Re ORA-01843:不是有效的月份错误

Oracle Re ORA-01843:不是有效的月份错误,oracle,date,plsql,oracle11g,oracle-sqldeveloper,Oracle,Date,Plsql,Oracle11g,Oracle Sqldeveloper,查询: 选择t3.e\U id、t6.e\U id 从t3到t6 哪里 (于20160801年至20170731年之间发送至_CHAR(t6.EI_Q17,'YYYYMMDD')) 和(t3.E_状态='W') 和(t3.E_开始2017年7月31日) 但我得到一个错误:ORA-01843:不是有效月份。 你知道如何解决这个问题吗 谢谢, Ar使用标准日期语法和显式的joins: SELECT t3.e_id, t6.ei_id FROM t3, t6 WHERE (TO_CHAR(t6.E

查询:

选择t3.e\U id、t6.e\U id
从t3到t6
哪里
(于20160801年至20170731年之间发送至_CHAR(t6.EI_Q17,'YYYYMMDD'))
和(t3.E_状态='W')
和(t3.E_开始<'1/8/2016')
和(t3.E_END>2017年7月31日)
但我得到一个错误:
ORA-01843:不是有效月份。

你知道如何解决这个问题吗

谢谢,
Ar

使用标准日期语法和显式的
join
s:

SELECT t3.e_id, t6.ei_id
FROM t3, t6
WHERE 
(TO_CHAR(t6.EI_Q17, 'YYYYMMDD') BETWEEN 20160801 AND 20170731)
AND (t3.E_STATUS                = 'W')
AND (t3.E_START                 < '1/8/2016')
AND (t3.E_END                   > '31/7/2017')
选择t3.e\U id、t6.e\U id
从t3交叉连接t6
其中t6.EIU Q17在日期“2016-08-01”和日期“2017-07-31”之间,以及
t3.E_状态=‘W’和
t3.E_开始<日期'2016-08-01'和
t3.E_结束>日期“2017-07-31”;

如果使用
DATE
和ISO 8601标准日期格式,则不必担心日期常量的本地化设置。您也不需要将查询与函数调用混在一起。

使用标准的日期语法和显式的
join
s:

SELECT t3.e_id, t6.ei_id
FROM t3, t6
WHERE 
(TO_CHAR(t6.EI_Q17, 'YYYYMMDD') BETWEEN 20160801 AND 20170731)
AND (t3.E_STATUS                = 'W')
AND (t3.E_START                 < '1/8/2016')
AND (t3.E_END                   > '31/7/2017')
选择t3.e\U id、t6.e\U id
从t3交叉连接t6
其中t6.EIU Q17在日期“2016-08-01”和日期“2017-07-31”之间,以及
t3.E_状态=‘W’和
t3.E_开始<日期'2016-08-01'和
t3.E_结束>日期“2017-07-31”;

如果使用
DATE
和ISO 8601标准日期格式,则不必担心日期常量的本地化设置。您也不需要将查询与函数调用混为一谈。

首先,您必须按照Gordon的建议使用标准日期语法和显式联接。其次,从您发布的查询中,它看起来像是列
t6.EI_Q17
varchar
具有
date
。在这种情况下,您需要按如下方式将其强制转换两次:

SELECT t3.e_id, t6.ei_id
FROM t3 CROSS JOIN t6
WHERE t6.EI_Q17 BETWEEN DATE '2016-08-01' AND DATE '2017-07-31' AND
      t3.E_STATUS = 'W' AND
      t3.E_START < DATE '2016-08-01' AND
      t3.E_END > DATE '2017-07-31';
输出:

SQL> select dt 
    from
    (select to_char(to_date('2017-06-01','YYYY-MM-DD'),'YYYYMMDD') dt from dual )
    where dt between 20170601 and 20170603 ;

首先,您必须按照Gordon的建议使用标准日期语法和显式联接。其次,从您发布的查询中,它看起来像是列
t6.EI_Q17
varchar
具有
date
。在这种情况下,您需要按如下方式将其强制转换两次:

SELECT t3.e_id, t6.ei_id
FROM t3 CROSS JOIN t6
WHERE t6.EI_Q17 BETWEEN DATE '2016-08-01' AND DATE '2017-07-31' AND
      t3.E_STATUS = 'W' AND
      t3.E_START < DATE '2016-08-01' AND
      t3.E_END > DATE '2017-07-31';
输出:

SQL> select dt 
    from
    (select to_char(to_date('2017-06-01','YYYY-MM-DD'),'YYYYMMDD') dt from dual )
    where dt between 20170601 and 20170603 ;

任何关于如何解码的想法:和(截至日期('2017年7月31日,'2017年7月31日,'2017年7月31日,'2017年6月31日,'2017年7月31日,'2017年1月31日')-t3.E\u开始+1<14)尝试
和(日期'2017-07-31'-t3.E\u开始+1<14)尝试
和(日期'2017-07-31'-t3.E\u开始+1<14)
我刚刚选中了列EI_Q17,它将数据类型显示为日期。“所以我不需要投下它?”阿鲁纳拉胡南。所以现在的帖子对你有用,或者你遇到了问题。如果出现问题,您可以发布问题以供进一步调查。当我将查询插入SSRS时,我发现ORA-01843不是有效的月份错误report@ArunaRaghunam. 不确定它在SSRS中如何工作,但在oracle中应该可以正常工作。请参阅answerI刚才选中的演示栏EI_Q17将数据类型显示为日期。“所以我不需要投下它?”阿鲁纳拉胡南。所以现在的帖子对你有用,或者你遇到了问题。如果出现问题,您可以发布问题以供进一步调查。当我将查询插入SSRS时,我发现ORA-01843不是有效的月份错误report@ArunaRaghunam. 不确定它在SSRS中如何工作,但在oracle中应该可以正常工作。看一个演示来回答这个问题