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

遇到SQL错误:ORA-01843:不是有效月份

巫马令
2023-03-14

我使用以下查询创建了一个表
Create table Store(id number(11)主键not null,opening_time timestamp CHECK(EXTRACT(HOUR FROM opening_time)>8 null);

现在,当我尝试使用insert into Store values(1,'04/04/201213:35pm')插入一些数据时,SQL错误:ORA-01843:not a valid month。

我做错了什么?

共有1个答案

孙文康
2023-03-14

'04/04/2012 13:35 pm'不是日期-它是字符串。

当使用NLS_DATE_FORMAT会话参数的值作为格式掩码将非日期文本插入到DATE列时,Oracle将对非日期文本执行隐式to_date(string_value,format_mask)操作(注意:这是一个会话参数,属于客户端;它不是全局设置)。如果非日期文本匹配这种格式,那么它就可以工作(如果不匹配,那么它就不能工作)-但是,如果nls_date_format被更改,那么它就会立即中断(调试起来非常困难,因为正常工作的代码不会,但没有人会更改代码)。

您可以通过以下查询找到当前的nls_date_format:

SELECT VALUE
FROM   NLS_SESSION_PARAMETERS
WHERE  PARAMETER = 'NLS_DATE_FORMAT';

最好使用to_date()和正确的格式掩码,或者使用ANSI/ISO日期文本(例如date'2012-04-04'timestamp'2012-04-0413:35')。

你可以做:

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );

(您不需要AM/PM,因为hour组件已经在24小时时钟上)

INSERT INTO STORE ( id, opening_time )
  VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );

(使用ANSI/ISO时间戳文本,Oracle将隐式转换为日期)

 类似资料:
  • 问题内容: 我使用此查询创建了一个表现 在,当我尝试使用插入一些数据时,遇到此错误。 我做错了什么? 问题答案: 不是日期,而是一个字符串。 当使用session参数的值作为格式掩码将Oracle非日期文字插入到列中时,Oracle将对其进行隐式处理( 注意:这是一个session参数,属于客户端;它不是全局设置 )。如果非日期文字与该格式匹配,则它将起作用(如果不匹配,则它将不起作用)-但是,如

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

  • “SQL错误:ORA-01843:无效月份” 我不知道我的查询有什么问题。

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

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

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