【发布时间】:2016-10-15 22:07:51
【问题描述】:
我正在尝试在插入之前更改 CSV 文件中的日期格式。我在插入之前创建了一个触发器,但它似乎不起作用。
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;
这是我在插入之前的触发器
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
假设查询是: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');
我得到这个错误:
`Error Code: 1411. Incorrect datetime value: '0000-00-00' for function str_to_date`
如果我这样做(没有 IGNORE):
INSERT 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');
我明白了:
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');
输出是:
2016-05-31
任何帮助将不胜感激!谢谢。
【问题讨论】:
-
我不确定,但我认为这与表中日期的默认 null 有关。
-
很明显,日期时间值是错误的。
-
@RichardBarker 我会尝试删除它来查看。
-
我认为您向 str_to_date 发送了错误的值。看起来您正在使用当前正在插入的行,而不是传递给插入语句的值......但我可能是错的。
-
the row currently be inserted and not the values passed to the insert statement... 这些不是一回事吗?
标签: mysql triggers str-to-date