SQL 数据截断:日期值不正确

Sta*_*cks 3 sql error-handling truncation oracle11g

我收到这个错误。

数据截断:日期值不正确:第 1 行“dateFrom”列的“18-JUN-13”

这个错误的原因可能是什么?

INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('01', '01', '18-JUN-13', '26-NOV-13', '01'); 
INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('02', '01', '18-JUN-85', '26-JUN-85', '02'); 
INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('02', '03', '18-JUN-66', '26-JUN-66', '01'); 
INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('04', '02', '18-OCT-13', '23-OCT-13', '01'); 
INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('02', '03', '18-JUL-87', '26-AUG-87', '01'); 
INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('02', '03', '18-AUG-87', '26-AUG-87', '01'); 
INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) VALUES ('02', '01', '18-AUG-87', '26-SEP-87', '01');
Run Code Online (Sandbox Code Playgroud)

Luk*_*der 5

如果您并非绝对需要依赖格式化日期,请始终使用 SQL 标准DATE文字,正如我在这篇博文中所描述的那样。所以,而不是:

INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) 
VALUES ('01', '01', '18-JUN-13', '26-NOV-13', '01'); 
Run Code Online (Sandbox Code Playgroud)

... 写:

INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) 
VALUES ('01', '01', DATE '2013-06-18', DATE '2013-11-26', '01'); 
Run Code Online (Sandbox Code Playgroud)

如果需要该格式(例如,因为您正在从某些外部源加载数据),请使用TO_DATE()解析它:

INSERT INTO Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo) 
VALUES (
  '01', 
  '01', 
  TO_DATE('18-JUN-13', 'DD-MON-YY'), 
  TO_DATE('26-NOV-13', 'DD-MON-YY'), 
  '01'
); 
Run Code Online (Sandbox Code Playgroud)