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

第二个日期参数抛出ORA-01843:不是有效的月份错误

曾喜
2023-03-14

我有一个查询,我需要使用Oracle检查两个日期之间的日期。每当我运行代码时,我都会收到ORA-01843:不是有效的月份错误。但是,每当我从sql中删除两个参数中的任何一个时,它都可以正常工作,但是尝试使用两个日期参数会引发错误。我错过了什么?

        StringBuilder sql = new StringBuilder();
        DateTime yearBegin = new DateTime(Convert.ToInt32(taxYear) + 1, 1, 1);
        DateTime yearEnd = new DateTime(Convert.ToInt32(taxYear) + 1, 12, 31);
        sql.Append(
            "SELECT * FROM TABLE WHERE FIELD = '1099' AND CREATED_DT >= TO_DATE(:createdYearBegin, 'MM/DD/YYYY') AND CREATED_DT <= TO_DATE(:createdYearEnd, 'MM/DD/YYYY') AND SSN = :ssn");
        try
        {
            using (OracleConnection cn = new OracleConnection(ConfigurationManager.AppSettings["cubsConnection"]))
            using (OracleCommand cmd = new OracleCommand(sql.ToString(), cn))
            {
                cmd.Parameters.Add("ssn", ssn);
                cmd.Parameters.Add("createdYearBegin", yearBegin.ToShortDateString());
                cmd.Parameters.Add("createdYearEnd", yearEnd.ToShortDateString());
                cn.Open();
                OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                ret = dr.HasRows;
            }
        }

共有3个答案

有骏祥
2023-03-14

打印出ToShortDateString的结果,您将看到会发生什么。还有,我同意“你应该提供一个格式,因为你不能依赖默认”。

艾泽语
2023-03-14

您希望日期格式为 MM/DD/YYYY,但不能保证 ToShortDateString() 以这种格式返回它。需要格式指定。但是,好吧,我什至不知道您正在使用什么编程语言来提供进一步的帮助......

芮叶秋
2023-03-14

认为参数的顺序有问题。

如果不按名称绑定参数,则按位置绑定参数(表示添加参数的顺序)。

只需尝试添加:

cmd.BindByName = true;
 类似资料:
  • 我在尝试从按日期筛选的表中选择数据时遇到了一个问题。 例如: null 此选择的结果是:

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

  • java.sql.SqlDataException:ORA-01843:不是有效月份 我可以为这个参数使用什么值集? 和我可以传递什么格式?

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

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

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

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

  • 其中为 附言。我知道那里有安全问题,但现在不是问题。