ORA-01843: not a valid month

南楼画角 提交于 2019-12-24 03:49:35

问题


I am having an issue with my sql query.

  create table rental
  (     
  rental_id NUMBER(5) NOT NULL,
  rental_date timestamp NOT NULL, 
  inventory_id NUMBER(5) NOT NULL,
  customer_id NUMBER(5) NOT NULL,
  return_date timestamp NOT NULL,
  staff_id NUMBER(5) NOT NULL,
  constraint rental_primary PRIMARY KEY (rental_id),
  constraint rental_foreign FOREIGN KEY (inventory_id) REFERENCES 

  inventory(inventory_id),
  constraint rental_foreign2 FOREIGN KEY (customer_id) REFERENCES
  customer(customer_id),
  constraint rental_foreign3 FOREIGN KEY (staff_id) REFERENCES staff(staff_id),
  constraint rental_unique_rental_date unique (rental_date),
  constraint rental_unique_inventory_id unique (inventory_id),
  constraint rental_unique_customer_id unique (customer_id),
  constraint rental_rental_date check(to_char(rental_date,'YYYY/MM/DD HH:MI:SS AM') 
  between '2005/01/01 00:00:01 AM' AND '12/31/2015 11:59:59 PM'),
  constraint rental_return_date check(to_char(return_date,'YYYY/MM/DD HH:MI:SS AM') 
  between '2005/01/01 00:00:01 AM' AND '12/31/2015 11:59:59 PM')
  );

when I am trying to insert data, It is throwing this error "ORA-01843: not a valid month". Can anyone please suggest me what type of datatype can I use for rental_date and return date to get through this situation? Here is my sample data which I am trying to upload

    rental_date                   return_date
   5/24/2011  10:53:30 PM        5/26/2011  10:04:30 PM

Note : I can see this type of format in my excel sheet where I have my data but when I get error

       "ORA-01843: not a valid month    
     Row 145: 144,  2011-05-25 23:49:56  ,1689,357,  2011-06-01 21:41:56  ,2"

I am observing different format of time here.

Can anyone suggest me a solution?

Thanks in advance.


回答1:


In your check constraints you specify TO_CHAR() with a date format mask of 'YYYY/MM/DD HH:MI:SS AM'. But the values you specify for the range are in two different formats, e.g.

'2005/01/01 00:00:01 AM' AND '12/31/2015 11:59:59 PM'

I think it would be a good idea to work with dates instead, as strings won't compare the way you think they do.

constraint rental_rental_date check(rental_date) 
    between to_date('2005/01/01 00:00:01 AM', 'YYYY/MM/DD HH:MI:SS AM') and
            to_date('2015/12/31 11:59:59 PM', 'YYYY/MM/DD HH:MI:SS AM')

However this may not be the root of your problem. It may be an conversion in your load process, which is why we need to know how you're loading the data.



来源:https://stackoverflow.com/questions/13107900/ora-01843-not-a-valid-month

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!