MySQL在触发器中正确使用From_Unixtime

MySQL在触发器中正确使用From_Unixtime,mysql,triggers,Mysql,Triggers,我有一个触发器,每当更新表A时,它就会将记录插入表B。这很好,但是TableA\u date是unix时间格式,我想在触发器插入表B中的记录时转换它 DELIMITER $$ CREATE TRIGGER MyTrigger AFTER INSERT ON TableA FOR EACH ROW BEGIN INSERT INTO TableB SET TableB_id = NEW.TableA_id, TableB_date = FROM_UNIXTIME(NE

我有一个触发器,每当更新表A时,它就会将记录插入表B。这很好,但是TableA\u date是unix时间格式,我想在触发器插入表B中的记录时转换它

DELIMITER $$
CREATE TRIGGER MyTrigger
AFTER INSERT
ON TableA
FOR EACH ROW 
BEGIN
    INSERT INTO TableB SET 
    TableB_id = NEW.TableA_id, 
    TableB_date = FROM_UNIXTIME(NEW.TableA_date, '%d/%m/%y %r'),
    TableB_comment = NEW.TableA_comment;
END $$
DELIMITER ;

在我的结果中,转换日期不是“01/01/70 03:00:05 AM”,而是“5”-我知道格式字符串是正确的,因为我可以在select语句中使用它。谢谢你的帮助

你工作太辛苦了。只需完全省略格式字符串。日期存储为日期,而不是字符串

事实上,根本不用转换!只需直接分配date列,MySQL就可以进行所需的任何转换

我假设TableA_日期是使用
时间戳
数据类型存储的,TableB_日期是
日期时间
。(尽管您可能也需要该时间戳的
timestamp

如果您正在使用其他数据类型,如int或char,请修复它。这不是构造数据库的正确方法



只是为了回答你的实际问题(而不是告诉你正确的方法),你想要的日期格式是
yyy-mm-dd hh:mm:ss
而不是你所拥有的。

你的
TableB.TableB\u-date
列的数据类型是什么?@Arkady这是个错误。它应该是
时间戳
。内部时间戳存储为int,但当您将其设置为timestamp时,MySQL会自动为您处理所有日期转换。