2015-10-14 98 views
2

我已经创建了一个图,其中列命令中的一个是:ORA-01843:不是一个有效一个月的数据类型转换

TO_CHAR(TO_DATE(sysdate ||' '||TIMING.TIME,'dd-MON-RRRR HH:MIAM'),'dd-MON-RRRR HH:MIAM') as time 

TIMING.TIME的值是这样的:作为09:30AM VARCHAR2

当我运行查询:select TO_DATE(time,'DD-MON-RRRR HH:MIAM')from view

我得到的错误

ORA-01843:不是VAL id month

NLS Language是美国的。 。

回答

3

TO_DATE(SYSDATE

这是不对的

切勿DATE数据类型的应用TO_DATE它迫使甲骨文:

  • 先将其转换一个字符串
  • 然后转换我t返回日期

基于区域设置特定的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用于display希望的字符串格式的日期。

为你修改后的查询:

to_date(TO_CHAR(sysdate, 'mm/dd/yyyy') ||' ' ||TIMING.TIME, 'mm/dd/yyyy hh:miAM') 
AS "TIME" 
1

sysdate店时间,倒不如把它转换连接前为char

TO_CHAR(sysdate,'dd-MON-RRRR')||' '||TIMING.TIME 
相关问题