Name              Type               Nullable Default Comments 
----------------- ------------------ -------- ------- -------- 
FINANCIALID       NUMBER(10)                                   
APPRAISEAQ        VARCHAR2(255 CHAR) Y                         
APPRAISELT        VARCHAR2(255 CHAR) Y                         
APPRAISESY        VARCHAR2(255 CHAR) Y                         
BANKID            NUMBER(10)                                   
BANKLAND          VARCHAR2(255 CHAR) Y                         
BANKNAME          VARCHAR2(255 CHAR) Y                         
CREATEDATE        TIMESTAMP(6)       Y                         
DATERATE          FLOAT                                        
DINGRATE          FLOAT                                        
FINANCIALONE      VARCHAR2(255 CHAR) Y                         
FINANCIALTHREE    VARCHAR2(255 CHAR) Y                         
FINANCIALTWO      VARCHAR2(255 CHAR) Y                         
FINANCIALTYES     VARCHAR2(255 CHAR) Y                         
HTTPADDRESS       VARCHAR2(255 CHAR) Y                         
IFBREAKEVEN       VARCHAR2(255 CHAR) Y                         
INVESTHORIZON     NUMBER(10)                                   
INVESTHORIZONNAME VARCHAR2(255 CHAR) Y                         
INVESTMONEY       NUMBER(10)                                   
INVESTMONEYNAME   VARCHAR2(255 CHAR) Y                         
MONEYTYPE         VARCHAR2(255 CHAR) Y                         
ONCLICKNUMBER     NUMBER(10)                                   
OPERATOR          VARCHAR2(255 CHAR) Y                         
PROCEEDSENDDATE   TIMESTAMP(6)       Y                         
PROCEEDSSTARTDATE TIMESTAMP(6)       Y                         
PROCEEDSTYPE      VARCHAR2(255 CHAR) Y                         
PRODUCTNAME       VARCHAR2(255 CHAR) Y                         
PRODUCTTYPE       VARCHAR2(255 CHAR) Y                         
REMAR             VARCHAR2(255 CHAR) Y                         
SELLENDDATE       TIMESTAMP(6)       Y                         
SELLLAND          VARCHAR2(255 CHAR) Y                         
SELLSTARTDATE     TIMESTAMP(6)       Y                         
SHOWFIRST         NUMBER(10)                                   
STAUTS            VARCHAR2(255 CHAR) Y                         
YEARRATE          FLOAT     
插入数据
 INSERT INTO financial VALUES ('345', null, null, null, '3', '南京', '农业银行','0', '0', '1', '120', '0', '人民币', '操作人adminUser。导入文件名:银行数据-2014-07-28(1).xlsx2014-35-21 11:21', null, null, '浮动收益', '“金钥匙·安心得利”2014年第1664期私人银行人民币理财产品', '封闭', null, '2014-12-30 00:00:00', '南京', '2014-07-26 00:00:00', '0', '5.15', '', '2014-08-21 11:35:21', '0', null, null, null, '2', '0', '0', '三个月');
 
报错
 
ORA-01847: 月份中日的值必须介于 1 和当月最后一日之间
哪里有问题啊?求解答?

解决方案 »

  1.   

    上面那个不是主要问题
    '2014-08-21 11:35:21'直接这样写是字符串类型,如果对应的字段是日期类型,数据库会按数据库默认的日期掩码DD-MON-YY进行转换,就会出现ORA-01847的报错
    插入的时候应该先把字符串用to_date指定掩码转化为日期类型再执行插入操作
    to_date('2014-08-21 11:35:21','yyyy-mm-dd hh24:mi:ss')
      

  2.   

    2楼正解,是要用to_date来格式化并转换日期
      

  3.   

    ---2014-35-21 11:21确认一下你的数据库日期格式
    SQL> show parameter nls_dateNAME                                 TYPE        VALUE
    ------------------------------------ ----------- -------------
    nls_date_format                      string
      

  4.   

    用to_date函数把varchar2类型转换成date类型 
      

  5.   

    同意2楼所说,插入日期格式的时候,根据字段类型是字符串,插入的时候应该先把字符串用to_date指定掩码转化为日期类型再执行插入操作。
      

  6.   

    如2楼所说,字符类型的日期转换成date类型的日期时,需要使用to_date(日期字符串,掩码格式)来进行转换,字符串与掩码不对应的话,会报错或者转换错误。
    说一下年份掩码:
    如果格式为YY且只提供了最后2位年份,那么服务器会在前面自动添加当前年份的前两位;
    如果格式为YYY且只提供了最后2位年份,那么服务器会同YY格式一样操作;
    如果格式为YYYY且只提供了最后2位年份,那么服务器会在前面接00;
    如果格式为RR或RRRR且只提供了最后2位年份,则确定世纪的规则如下:
    确定指定年世纪的规则如下:
    ● 如果指定年在00~49之间,并且当前年份在00~49之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为15,而当前年份为2007,那么指定年就是2015。
    ● 如果指定年在50~99之间,并且当前年份在00~49之间,那么指定年的世纪就等于当前年份的世纪减去1。因此,指定年的前两位数字等于当前年份的前两位数字减去1。例如,如果指定年为75,而当前年份为2007,那么指定年就是1975。
    ●  如果指定年在00~49之间,并且当前年份在50~99之间,那么指定年的世纪就等于当前年份的世纪加上1。因此,指定年的前两位数字等于当前年份的前两位数字加上1。例如,如果指定年为15,而当前年份为2075,那么指定年就是2115。
    ●  如果指定年在50~99之间,并且当前年份在50~99之间,那么指定年的世纪就与当前年份的世纪相同。因此,指定年的前两位数字就等于当前年份的前两位数字。例如,如果指定年为55,而当前年份为2075,那么指定年就是2055。
      

  7.   

    .xlsx2014-35-21 11:21 应该不是这个问题,毕竟只是一个文件的名称。
    原因可能是你的to_date()函数还没掌握好吧,,,,慢慢学啊
      

  8.   

    TIMESTAMP(6) 的时间戳类型在插入的时候要注意转换,需要使用to_date来进行转换后转换。
      

  9.   

    你要插入的时间字段,要利用to_date('','yyyy-MM-dd hh:mi:ss')来varchar类型的数据转换一下,不然肯定不行啊。
    insert into ss values (to_date('2014/11/22','yyyy/MM/dd'));
    insert into ss values ('2014/11/22');我都测试了一下,第一种就没问题。
      

  10.   

    先看一眼你时间那一列的数据类型,如果不是以字符类型存储那就要用to_date()函数对字符串进行处理以后才能正常存储