ORA-01846:not a valid day of the week

执行语句

  select next_day('2010-12-11', 'TUESDAY') from dual

报错 ORA-01846:not a valid day of the week 

解决办法: 

alter session set nls_date_language = 'American'

 

alter session 只对当前会话生效;
alter system ......scope=spfile 修改spfile,重启后生效;
alter system ......scope=memory修改当前的实例,不修改spfile,重启后失效;
alter system ......scope=both(默认) 当前实例生效且修改spfile。

 

nls_date_language , SERVER端的日期类型的lang,比如中文的时候,显示“星期一”,英文时,显示MONDAY。
官方解释:
NLS_DATE_LANGUAGE specifies the language to use for the spelling of day and month names 
and date abbreviations (a.m., p.m., AD, BC) returned by the TO_DATE and TO_CHAR functions.

NLS_LANGUAGE specifies the default language of the database. This language is used for messages,
day and month names, symbols for AD, BC, a.m., and p.m., and the default sorting mechanism. 
This parameter also determines the default values of the parameters NLS_DATE_LANGUAGE and NLS_SORT.

 

ORA-01843: not a valid month 是一个 Oracle 数据库的错误代码,表示提供的月份值无效。这个错误通常在执行 SQL 语句时发生,特别是涉及到日期格式转换或插入日期数据时。 以下是一些常见的原因和解决方法: 1. **日期格式不正确**: - 确保输入的日期格式与数据库的默认日期格式匹配。例如,默认格式可能是 'DD-MON-YYYY',而输入的可能是 'DD/MM/YYYY'。 2. **月份名称拼写错误**: - 检查月份名称是否拼写正确。例如,'January' 而不是 'Janurary'。 3. **NLS_DATE_LANGUAGE 设置错误**: - 如果使用非英语月份名称,确保 NLS_DATE_LANGUAGE 设置正确。例如: ```sql ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH'; ``` 4. **使用 TO_DATE 函数时指定正确的格式**: - 在使用 TO_DATE 函数时,明确指定日期格式。例如: ```sql TO_DATE('01-JAN-2021', 'DD-MON-YYYY') ``` 5. **数据导入问题**: - 如果从外部文件导入数据,确保日期字段的格式与数据库的日期格式一致。 以下是一些示例代码,展示了如何正确处理日期数据: ```sql -- 示例 1:使用正确的日期格式 INSERT INTO employees (employee_id, hire_date) VALUES (1, TO_DATE('01-JAN-2021', 'DD-MON-YYYY')); -- 示例 2:更改 NLS_DATE_LANGUAGE ALTER SESSION SET NLS_DATE_LANGUAGE = 'ENGLISH'; -- 示例 3:使用 TO_DATE 函数时指定语言 INSERT INTO employees (employee_id, hire_date) VALUES (2, TO_DATE('01-JAN-2021', 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = AMERICAN')); ``` 通过确保日期格式和语言设置正确,可以避免 ORA-01843 错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值