我想将一个表中的日期值插入另一个表中。不幸的是,这不能按预期工作。我想日期值不会被识别为日期,MySQL会尝试将其转换并混淆它。
这是我的疑问:
INSERT INTO T2 (name, yearID, event_date, some_value)
SELECT candidate_name, year_id, dateOfEvent, SUM(score) FROM T1
event_date
和dateOfEvent
列都属于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);
(两者都简化为仅显示相关部分。)
答案 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。