如何在MySQL中将日期值从一个表插入另一个表

时间:2016-08-14 12:32:33

标签: mysql

我想将一个表中的日期值插入另一个表中。不幸的是,这不能按预期工作。我想日期值不会被识别为日期,MySQL会尝试将其转换并混淆它。

这是我的疑问:

INSERT INTO T2 (name, yearID, event_date, some_value) 
    SELECT candidate_name, year_id, dateOfEvent, SUM(score) FROM T1

event_datedateOfEvent列都属于DATE

类型

执行以下查询时:

SELECT candidate_name, year_id, dateOfEvent, SUM(score) AS result FROM T1

给出了这个结果:

+----------------+---------+-------------+--------+
| candidate_name | year_id | dateOfEvent | result |
+----------------+---------+-------------+--------+
|             17 |       4 |  2016-07-29 |    185 |
+----------------+---------+-------------+--------+

尝试完整查询时(如上所示),将显示以下错误消息:

Error Code: 1292. Truncated incorrect date value: 'Sun Jun 14 2015 12:02:54 GMT+0200 (CEST)'

有谁知道原因?我没有像2015-06-14这样的日期...我唯一能说的就是dateOfEvent列以某种方式搞砸了并重新解释为日期。

...奇怪

这里是T2的CREATE命令:

CREATE TABLE `T2` (
`name` int(11) NOT NULL,
`event_date` date NOT NULL,
`some_value` int(11) DEFAULT NULL,
`some_other_value` int(11) DEFAULT NULL,
`some_different_value` int(11) DEFAULT NULL,
`yearID` int(10) unsigned NOT NULL);

对于T1:

CREATE TABLE `T1` (
`candidate_name` int(11) NOT NULL,
`score` int(11) DEFAULT NULL,
`zentrum` int(11) DEFAULT NULL,
`zehntel` float DEFAULT NULL,
`year_id` int(10) DEFAULT NULL,
dateOfEvent date NOT NULL);

(两者都简化为仅显示相关部分。)

2 个答案:

答案 0 :(得分:0)

我不知道你为什么会看到这个问题。似乎其中一列不是date,大概是dateofevent。该错误消息似乎与您显示的示例数据中的数据类型无关。

但是,这种说法不正确:

INSERT INTO T2 (name, yearID, event_date, some_value) 
    SELECT candidate_name, year_id, dateOfEvent, SUM(score)
    FROM T1;

您有一个聚合函数,但没有group by。因此,这会对score中所有行的T1求和,然后获取前三列的任意值。也许你真的打算:

INSERT INTO T2 (name, yearID, event_date, some_value) 
    SELECT candidate_name, year_id, dateOfEvent, SUM(score)
    FROM T1
    GROUP BY candidate_name, year_id, dateOfEvent;

答案 1 :(得分:0)

如果我没有错,它在MySQL中没有GROUP BY就可以正常工作,尽管它是各个列的不同数据类型的问题。表T2中未提供event_date。