我的sql查询存在问题。
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')
);
当我尝试插入数据时, 它抛出此错误“ORA-01843:不是有效月份”。 任何人都可以建议我可以使用哪种类型的数据类型来rent_date和返回日期来度过这种情况? 以下是我要上传的示例数据
rental_date return_date
5/24/2011 10:53:30 PM 5/26/2011 10:04:30 PM
注意:我可以在我的Excel工作表中看到这种格式,我有我的数据,但是当我收到错误时
"ORA-01843: not a valid month
Row 145: 144, 2011-05-25 23:49:56 ,1689,357, 2011-06-01 21:41:56 ,2"
我在这里观察不同的时间格式。
有人能建议我解决方案吗?
提前致谢。
答案 0 :(得分:2)
在检查约束中,指定TO_CHAR(),日期格式掩码为'YYYY/MM/DD HH:MI:SS AM'
。但是您为该范围指定的值有两种不同的格式,例如
'2005/01/01 00:00:01 AM' AND '12/31/2015 11:59:59 PM'
我认为使用日期代替是一个好主意,因为字符串无法与您认为的方式进行比较。
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')
然而,这可能不是您问题的根源。它可能是您加载过程中的转换,这就是我们需要知道您如何加载数据的原因。