2016-06-15 6 views
1

삽입하기 전에 CSV 파일에서 날짜 형식을 변경하려고합니다. 삽입하기 전에 방아쇠를 만들었지 만 작동하지 않는 것 같습니다. INSERT IGNORE INTO pricelist.items (price_list_id, sku, description, cost, start_date, end_date, notes) VALUES ('15', '2494-22', 'M12 DRILL/IMPACT COMBO KIT', '129', '4/25/2016', '5/31/2016', 'CL6204');오류 코드 : 1411. str_to_date 함수에 대해 잘못된 datetime 값 : '0000-00-00'

나는이 오류가 : INSERT

CREATE TRIGGER `pricelist`.`items_BEFORE_INSERT` BEFORE INSERT ON `items` FOR EACH ROW 
BEGIN 
    SET NEW.start_date = str_to_date(NEW.start_date, '%c/%e/%Y'); 
    SET NEW.end_date = str_to_date(NEW.end_date, '%c/%e/%Y'); 

END 

하자 쿼리는 말을하기 전에

CREATE TABLE items (
    item_id int(11) NOT NULL AUTO_INCREMENT, 
    price_list_id int(11) NOT NULL, 
    sku varchar(20) NOT NULL, 
    description varchar(45) DEFAULT NULL, 
    cost float NOT NULL DEFAULT '0', 
    notes varchar(45) DEFAULT NULL, 
    discount_factor float DEFAULT '1', 
    start_date date DEFAULT NULL, 
    end_date date DEFAULT NULL, 
    PRIMARY KEY (item_id,sku), 
    KEY price_list_id_idx (price_list_id), 
    CONSTRAINT price_list_id FOREIGN KEY (price_list_id) REFERENCES price_lists (price_list_id) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=105193 DEFAULT CHARSET=utf8; 

이 내 트리거입니다

`Error Code: 1411. Incorrect datetime value: '0000-00-00' for function str_to_date` 

내가 할 경우 (무시하지 않고) :

012 이 작동하지만

Error Code: 1292. Incorrect date value: '4/25/2016' for column 'start_date' at row 1 

:

SELECT str_to_date('5/31/2016', '%c/%e/%Y'); 

출력은 다음과 같습니다 34,931,846,352,836,223,233,210

나는이 얻을

2016-05-31 

는 어떤 도움을 주시면 감사하겠습니다! 감사.

+0

잘 모르겠지만 테이블의 날짜에 기본 null과 관련이 있다고 생각합니다. –

+0

분명히 datetime 값이 잘못되었습니다. – Blank

+0

@RichardBarker보기 위해 제거하려고합니다. – GeniusMile

답변

0

잘못된 형식의 date 열을 삽입하려고하므로이 오류가 발생합니다. MySQL documentation 나열 허용 형식 :

MySQL이 이러한 형식으로 날짜 값을 인식하십시오 중 하나를 'YYYY-MM-DD'의 문자열 또는 'YY-MM-DD'형식으로

. "완화 된"구문이 허용됩니다. 구두점 문자는 날짜 부분 사이의 구분 기호로 사용될 수 있습니다. 예를 들어 '2012-12-31', '2012/12/31', '2012^12^31'및 '2012 @ 12 @ 31'은 동일합니다.

'YYYYMMDD'또는 'YYMMDD'형식의 구분 기호가없는 문자열로서 문자열이 날짜로 이해되는 경우에 한합니다.

YYYYMMDD 또는 YYMMDD 형식의 숫자로, 해당 숫자는 날짜로 이해해야합니다.

날짜는 MM/DD/YYYY입니다. 4/25/2016이므로 작동하지 않습니다. 삽입 전에 형식을 수정하기 위해 트리거를 사용하려는 것 같습니다. 그러나 MySQL은 의 형식을 확인한 후에 트리거가 적용됩니다.

이 형식으로 날짜 데이터를 입력해야하는 경우 VARCHAR 유형을 사용하고 이후에 STR_TO_DATE을 호출해야합니다. 또는 허용되는 형식 중 하나와 일치하도록 날짜 형식을 정리해야합니다.

+0

정답으로 보입니다. INSERT하기 전에 생각했습니다. 방아쇠가 솔루션이었을 것입니다. 다른 해결책을 찾으려고합니다. 감사합니다. – GeniusMile

+0

그러면 질문의 끝에있는 select 문이 실패합니까? –

+0

당신은'BEFORE INSERT'를 사용하는 것이 현명했지만 MySQL은 여전히'date'의 형식에 제한이 있습니다. –