如何为5/24 - 27/41的日期创建此列? MySQL的

时间:2018-02-08 08:59:25

标签: mysql sql

我正在尝试创建此表:https://gyazo.com/7077635ffc81ee947cd7abf3725b0d8f

enter image description here

然而,我似乎无法让日期起作用。

这就是我所拥有的

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行

如何解决?

1 个答案:

答案 0 :(得分:0)

SQL中的

,如果不将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 |

SQL Fiddle