我正在尝试创建此表:https://gyazo.com/7077635ffc81ee947cd7abf3725b0d8f
然而,我似乎无法让日期起作用。
这就是我所拥有的
CREATE TABLE Battles(
name VARCHAR(30), date DATE)
CREATE TABLE Battles(
name VARCHAR(30), date DATE);
INSERT into Battles VALUES
('Denmark Strait', 5/24 - 27/41),
('Guadalcanal', 11/15/42),
('North Cape', 12/26/43),
('Surigao Strait', 10/25/44);
第二部分错误。
错误是
错误代码:1292。日期值不正确:' -0.450203252'对于专栏 '日期'在第1行
如何解决?
答案 0 :(得分:0)
,如果不将DATE
数据类型转换为VARCHAR
数据类型,则无法将它们组合在一起。所以,实际数据是这样的:
| name | date |
|----------------|------------|
| Denmark Strait | 1941-05-27 |
| Denmark Strait | 1941-05-24 |
| Guadalcanal | 1942-11-15 |
| North Cape | 1943-12-26 |
| Surigao Strait | 1944-10-25 |
所以,丹麦海峡有两个记录,你提供的图片是合并日期与VARCHAR
同名的结果而不改变或触摸源(只是格式化输出)
所以,基本上,你想要做同样的过程来实现相同的输出。 你可以这样做:
SELECT
b1.name AS Name,
IF(COUNT(b1.name) > 1, CONCAT(DATE_FORMAT(b1.date, '%m/%d'), " - ", DATE_FORMAT(b2.date, '%d/%y')), CONCAT(DATE_FORMAT(b1.date, '%m/%d/%y')) ) AS Date
FROM battles b1
LEFT OUTER JOIN battles b2 ON b2.name = b1.name AND b2.date > b1.date
GROUP BY b1.name
输出
| Name | Date |
|----------------|---------------|
| Denmark Strait | 05/24 - 27/41 |
| Guadalcanal | 11/15/42 |
| North Cape | 12/26/43 |
| Surigao Strait | 10/25/44 |