您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

INSERT语句上的“指定有效月份”

INSERT语句上的“指定有效月份”

除非您在表上设置了日期或时间戳记列的触发器(这会在完整的错误堆栈中提供一些指示),否则听起来您NLS_DATE_LANGUAGE不希望使用英语月份的缩写。

您所拥有的是有效的英文:

alter session set nls_timestamp_format = 'RR/MM/DD HH24:MI:SSXFF';
alter session set nls_date_language ='ENGLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;

MY_DATE                   
---------------------------
14/04/15 13:36:58.803000000

但是,如果您会话的认日期语言是波兰语(通过您的个人资料猜测),则会出现此错误-错误消息仍为英语:

alter session set nls_date_language ='POLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM') as my_date
from dual;

sql Error: ORA-01843: not a valid month
01843. 00000 -  "not a valid month"

如果您不想将会话设置为英语,则可以通过将可选的第三个参数to_timestamp()设置为来覆盖特定语句的会话:

alter session set nls_date_language ='POLISH';

select to_timestamp('15-APR-14 01.36.58.803000000 PM',
  'DD-MON-RR HH.MI.SS.FF AM',
  'NLS_DATE_LANGUAGE=ENGLISH') as my_date
from dual;

MY_DATE                   
---------------------------
14/04/15 13:36:58.803000000

您还可以通过使用月份编号而不是月份名称或使用ANSI时间戳文字语法来完全避免此问题:

select timestamp '2014-04-15 13:36:58.803' from dual;

TIMESTAMP'2014-04-1513:36:58.803'
---------------------------------
14/04/15 13:36:58.803000000

这些方法也都适用于日期列。to_date()功能受NLS设置的影响相同,并且具有相同的可选日期语言参数。

SQL 2022/1/1 18:33:15 有500人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶