当前位置: 首页 > 知识库问答 >
问题:

Oracle:不是有效月份

汪天宇
2023-03-14

我有一个包含以下字段的表:

报告(表名)Rep_Date(日期)Rep_Time(日期)

select Reports.pid, MaxDate from Reports
INNER JOIN (
    select pid, max(TO_DATE(TO_CHAR(REP_DATE, 'DD/MM/YYYY')
        || TO_CHAR(REP_TIME, 'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS')) As MaxDate
    from reports
    group by pid
) ReportMaxDate
on Reports.PID = ReportMaxDate.PID
AND To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE
WHERE REPORTS.PID=61
select rep_date, rep_time from reports where pid=61 and rownum=1
Rep_Date = 01/04/2009
Rep_Time = 01/01/1753 13:00:00

更新15:58我现在可以执行以下查询:

select Reports.pid, MaxDate from Reports
INNER JOIN (
    select pid, max(TO_DATE(TO_CHAR(REP_DATE, 'DD/MM/YYYY')
        || TO_CHAR(REP_TIME, 'HH24:MI:SS'), 'DD/MM/YYYY HH24:MI:SS')) As MaxDate
    from reports group by pid
) ReportMaxDate
on Reports.PID = ReportMaxDate.PID
AND to_date(to_char(maxdate,'MM/DD/YYYY'),'MM/DD/YYYY') = REP_DATE
WHERE REPORTS.PID=61

但是,我需要在WHERE子句中再添加一条语句,将MaxDate的时间部分与rep_time:to_date(to_char(MaxDate,'mm/dd/yyyy'),'mm/dd/yyyy')=rep_date不起作用。

共有1个答案

于意智
2023-03-14

1.

To_Date(To_Char(MaxDate, 'DD/MM/YYYY')) = REP_DATE

导致了这个问题。当您使用to_date而不使用time格式时,oracle将使用当前会话NLS格式进行转换,在您的情况下,该格式可能不是“dd/mm/yyyy”。看看这个...

SQL> select sysdate from dual;

SYSDATE
---------
26-SEP-12

Which means my session's setting is DD-Mon-YY

SQL> select to_char(sysdate,'MM/DD/YYYY') from dual;

TO_CHAR(SY
----------
09/26/2012


SQL> select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual;
select to_date(to_char(sysdate,'MM/DD/YYYY')) from dual
               *
ERROR at line 1:
ORA-01843: not a valid month

SQL> select to_date(to_char(sysdate,'MM/DD/YYYY'),'MM/DD/YYYY') from dual;

TO_DATE(T
---------
26-SEP-12

2.

MaxDate = REP_DATE
trunc(MaxDate ) = rep_date
Rep_Date = 01/04/2009 Rep_Time = 01/01/1753 13:00:00
trunc(rep_date) = trunc(maxdate) and 
to_char(rep_date,'HH24:MI:SS') = to_char(maxdate,'HH24:MI:SS')

不管怎样,时间被错误地存储(正如你从1753年可以看出的那样),可能会有其他问题。

 类似资料:
  • 我为PHP更改了OCI8版本,由于该查询不起作用: 我收到这个消息: 消息:oci_execute():ora-01843:不是有效月份 它与Toad一起用于Oracle11。你有什么解决办法吗? 谢谢:)

  • 我正在websphere 7.0版本上运行一个应用程序,该应用程序是在我的QA环境中新设置的,并且低于oracle错误

  • 我试图从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-aug-12)。 编辑:我的约会语言匹配器设置为“法语”。我可以改成“美国”吗?

  • 这是我的oracle sql查询。我正在用Python运行它。当我在Oracle SQL Developer中运行它时,它会给出结果,但每当我试图在pycharm中执行它时,就会出现以下错误: cx_oracle.databaseError:ORA-01843:不是有效月份 当我跑的时候 这在oracle sql developer中显示

  • 请帮忙。我在这里犯了一个小错误,但即使看了前面的问题,我也找不到它。 查询运行时没有错误,但是当我从结果中选择所有数据时(通过执行Ctrl+a),我得到ORA-1843:不是一个有效的月份。 谢谢你。 此外,我被错误的数据模型所困扰。此日期字段的值如“0--”,月份值大于12,最后天大于31。现在我想在选择期间忽略这些记录。我创建的存储过程不能正常工作,请提供帮助。谢了。