【问题标题】:Conversion of Mysql date format (DD-MM-YYYY TO YYYY-MM-DD)Mysql日期格式的转换(DD-MM-YYYY TO YYYY-MM-DD)
【发布时间】:2026-02-13 18:00:02
【问题描述】:

我有三列mysql表 编号(整数) 日期(Varchar)(dd-mm-yyyy 中的数据) Logdate(日期)(当前为空)

是否有任何查询可以获取日期并使用 mysql 日期格式更新 Logdate (yyyy-mm-dd)

【问题讨论】:

标签: mysql


【解决方案1】:

您可以使用STR_TO_DATE 函数将字符串转换为Date 值。您必须指定您提供的日期字符串的格式。在您的情况下,它将是'%d-%m-%Y'。出于测试目的,您可以运行以下查询来检查它是否有效:

mysql> EXPLAIN Dummy;
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| ID      | int(11)     | YES  |     | NULL    |       |
| oldDate | varchar(50) | YES  |     | NULL    |       |
| logdate | date        | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> SELECT * FROM Dummy;
+------+------------+------------+
| ID   | oldDate    | logdate    |
+------+------------+------------+
|    1 | 24-12-2019 | 2000-01-01 |
|    1 | 04-09-2017 | 2000-01-01 |
|    1 | 21-02-2019 | 2000-01-01 |
+------+------------+------------+
3 rows in set (0.00 sec)

mysql> SELECT oldDate, STR_TO_DATE(oldDate, '%d-%m-%Y') FROM Dummy;
+------------+----------------------------------+
| oldDate    | STR_TO_DATE(oldDate, '%d-%m-%Y') |
+------------+----------------------------------+
| 24-12-2019 | 2019-12-24                       |
| 04-09-2017 | 2017-09-04                       |
| 21-02-2019 | 2019-02-21                       |
+------------+----------------------------------+
3 rows in set (0.00 sec)

然后您可以运行UPDATE 查询来更新logdate 列中的值。

mysql> UPDATE Dummy SET logdate = STR_TO_DATE(oldDate, '%d-%m-%Y');
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> SELECT * FROM Dummy;
+------+------------+------------+
| ID   | oldDate    | logdate    |
+------+------------+------------+
|    1 | 24-12-2019 | 2019-12-24 |
|    1 | 04-09-2017 | 2017-09-04 |
|    1 | 21-02-2019 | 2019-02-21 |
+------+------------+------------+
3 rows in set (0.00 sec)

【讨论】:

    【解决方案2】:

    您可以从查询中进行手动定位。这是一个例子:

    SELECT CONCAT_WS('-',RIGHT(date,4),MID(date,4,2),LEFT(date,2)) as Newdate FROM table;
    

    然后,您可以按如下方式构建更新查询:

    UPDATE table SET Logdate = CONCAT_WS('-',RIGHT(date,4),MID(date,4,2),LEFT(date,2));
    

    已编辑: 我删除了关于STR_TO_DATE 的第一条评论,因为经过测试,它被证明是可用的,正如@Progman 回答中所指出的那样。

    【讨论】:

      最近更新 更多