我使用此查询创建了一个表现
CREATE TABLE Store (id number(11) primary key not null, opening_time timestamp CHECK (EXTRACT(HOUR FROM opening_time) > 8 || NULL));
在,当我尝试使用插入一些数据时insert into Store values(1, '04/04/2012 13:35 PM');
,遇到此错误SQL Error: ORA-01843: not a valid month
。
我做错了什么?
'04/04/2012 13:35 PM'
不是日期,而是一个字符串。
TO_DATE( string_value, format_mask )
当DATE
使用NLS_DATE_FORMAT
session参数的值作为格式掩码将Oracle非日期文字插入到列中时,Oracle将对其进行隐式处理(
注意:这是一个session参数,属于客户端;它不是全局设置
)。如果非日期文字与该格式匹配,则它将起作用(如果不匹配,则它将不起作用)-但是,如果将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-04 13:35'
)。
你可以做:
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TO_DATE( '04/04/2012 13:35', 'DD/MM/YYYY HH24:MI' );
(您不需要,AM/PM
因为小时部分已经在24小时制上了)
或者
INSERT INTO STORE ( id, opening_time )
VALUES( 1, TIMESTAMP '2012-04-04 13:35:00' );
(使用Oracle将隐式转换为日期的ANSI / ISO时间戳文字)
我使用以下查询创建了一个表 现在,当我尝试使用SQL错误:ORA-01843:not a valid month。 我做错了什么?
我在Oracle DB中有一个列,它是数据类型。存储在此列中的典型值类似于。我试图得到所有的记录,其中该专栏有记录后2015年8月1日。 但是,我得到的是。我哪里做错了?
我得到java.sql.sqlDataException:ORA-01843:运行时不是一个有效的月份。任何帮助都很感激!
请帮忙。我在这里犯了一个小错误,但即使看了前面的问题,我也找不到它。 查询运行时没有错误,但是当我从结果中选择所有数据时(通过执行Ctrl+a),我得到ORA-1843:不是一个有效的月份。 谢谢你。 此外,我被错误的数据模型所困扰。此日期字段的值如“0--”,月份值大于12,最后天大于31。现在我想在选择期间忽略这些记录。我创建的存储过程不能正常工作,请提供帮助。谢了。
“SQL错误:ORA-01843:无效月份” 我不知道我的查询有什么问题。
我希望在oracle数据库11.2.0.4版上的PL/SQL ETL进程中插入具有时间戳列的表中的数据 如果在Toad中运行“Create INSERT from seletcted row”,将得到以下SQL命令: 在PL/SQL中,我生成一个varchar2/string,类似于: