我创建了一个 View ,其中列命令之一是:
TO_CHAR( TO_DATE(sysdate ||' '||TIMING.TIME,'dd-MON-RRRR HH:MIAM'),'dd-MON-RRRR HH:MIAM') as time
TIMING.TIME 的值如下所示:09:30AM
as varchar2
当我运行查询时:从 View 中选择 TO_DATE(time,'DD-MON-RRRR HH:MIAM')
我收到错误
ORA-01843: not a valid month
NLS 语言是美国语言。
最佳答案
TO_DATE(sysdate
这是错误的。
切勿对DATE数据类型应用TO_DATE。它迫使 Oracle:
- 首先将其转换为字符串
- 然后将其转换回日期
基于特定于区域设置的 NLS 设置。您需要 TO_DATE 将文字转换为日期。对于日期算术,保留日期不变。
如果您尝试配置当前日期的时间部分,则: 1.首先将日期转为字符串 2.然后将时间部分连接到字符串 3. 最后申请TO_DATE
例如,
SQL> alter session set nls_date_format='DD-MM-YYYY HH:MI:SS AM';
Session altered.
SQL> SELECT to_date(TO_CHAR(sysdate, 'mm/dd/yyyy')
2 ||' '
3 ||'09:30AM', 'mm/dd/yyyy hh:miAM') TIME
4 FROM dual;
TIME
----------------------
14-10-2015 09:30:00 AM
记住,
- TO_DATE 用于将字符串转换为日期。
- TO_CHAR 用于以所需的字符串格式显示日期。
为您修改的查询:
to_date(TO_CHAR(sysdate, 'mm/dd/yyyy') ||' ' ||TIMING.TIME, 'mm/dd/yyyy hh:miAM')
AS "TIME"
关于sql - ORA-01843 : not a valid month with data type conversion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120096/