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

日期类型的并发程序参数给出错误ORA-01843:不是有效的月份

贺栋
2023-03-14
Select ordered_date, order_number, customer_id
From order_tbl xx       
Where  NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number
 and xx.ordered_date between NVL(trunc(TO_DATE(:P_FROM_DATE, 'YYYY/MM/DD HH24:MI:SS')), xx.ORDERED_DATE) and NVL(trunc(TO_DATE(:P_TO_DATE, 'YYYY/MM/DD HH24:MI:SS'), xx.ORDERED_DATE)
    AND NVL(:P_CUSTOMER, xx.customer_id) = xx.customer_id>

java.sql.SqlDataException:ORA-01843:不是有效月份

我可以为这个参数使用什么值集?
和我可以传递什么格式?

共有1个答案

仲孙温文
2023-03-14

如果您的参数像您所说的那样已经是日期,那么就不应该为它们调用to_date()。这将使用会话的NLS_DATE_FORMAT将日期隐式转换为字符串,然后尝试使用指定的格式模型将该字符串转换回日期。

如果NLS_DATE_FORMAT碰巧与您指定的内容匹配,那么这将起作用,但您不应该依赖于这种情况,也不应该进行隐式转换;你做的工作比你需要的要多。

所以只需将其简化为:

Select ordered_date, order_number, customer_id
From order_tbl xx       
Where  NVL(:P_ORDER_NUMBER, xx.order_number) = xx.order_number
and xx.ordered_date between NVL(trunc(:P_FROM_DATE), xx.ORDERED_DATE)
   and NVL(trunc(:P_TO_DATE), xx.ORDERED_DATE)
AND NVL(:P_CUSTOMER, xx.customer_id) = xx.customer_id>
 类似资料:
  • 我在尝试从按日期筛选的表中选择数据时遇到了一个问题。 例如: null 此选择的结果是:

  • 我使用以下查询创建了一个表 现在,当我尝试使用SQL错误:ORA-01843:not a valid month。 我做错了什么?

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

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

  • 我在Oracle DB中有一个列,它是数据类型。存储在此列中的典型值类似于。我试图得到所有的记录,其中该专栏有记录后2015年8月1日。 但是,我得到的是。我哪里做错了?

  • 我有一个在PL-SQL视图中使用的查询。该视图包含一个名为Jde_date的函数,该函数采用Julian格式的date参数并将其转换为Gregorian格式,它工作得很好。 查询如下: 但是当我发布报告时,我得到错误ORA-01843:不是一个有效的月份。 我该怎么解决?