如何在mysql中将文本数据类型转换为日期时间?

时间:2018-11-18 02:55:00

标签: mysql phpmyadmin

在mysql数据库中,创建了列名。此“创建的”列为文本数据类型,我需要将其更改为datetime。现在,此列有很多数据。是否可以转换它?或

数据库外观

created
18-11-15 18:21:25

期望输出是

created
2018-11-15 18:21:25

在做什么

ALTER TABLE invoices MODIFY created datetime

此查询给出了错误的数据。它从15-09-18 03:03:43转换为2015-09-18 03:03:43

4 个答案:

答案 0 :(得分:0)

此处最好的 操作是不要将日期存储为文本。假设您已经完成此操作,我们可以通过调用STR_TO_DATE来生成真实日期来解决:

SELECT
    STR_TO_DATE(created, '%y-%m-%d %h:%i:%s') AS created_out
FROM yourTable;

由于您期望的输出是标准日期输出,因此我们可以在此处停止操作,避免同时调用DATE_FORMAT来生成其他输出。

答案 1 :(得分:0)

您要转换输出还是数据库记录?第二,您可以使用sql查询:

UPDATE'table_name'SET'created'= CONCAT('20','created')

答案 2 :(得分:0)

如果原始数据不是MySQL Datetime格式( YYYY-MM-DD HH:MM:SS ),则不能仅将列数据类型从Varchar / Text更改为Date /约会时间。否则,将导致无法挽回的数据丢失。

这将是一个多步骤过程。您首先需要将日期字符串转换为MySQL date format YYYY-MM-DD HH:MM:SS )。我们可以为此使用STR_TO_DATE()函数。

您的样本日期字符串(18-11-15 18:21:25)基本上是%y-%m-%d %T格式。可以使用以下格式说明符:

  • %d每月的某天,以数字值(01到31)
  • %m月名称为数字值(00到12)
  • %y以2位数字表示的年份
  • %T时间以24小时制(hh:mm:ss)

查询日期更新如下:

UPDATE invoices  
SET created = STR_TO_DATE(created, '%y-%m-%d %T');

现在,您可以使用Alter Table将数据类型从“文本类型”更改为“日期时间”。

ALTER TABLE invoices 
MODIFY COLUMN created datetime;

答案 3 :(得分:0)

您首先需要在创建的列中将互换,如下所示:

UPDATE invoices
SET created = CONCAT(SUBSTR(created, 7, 2), '-', SUBSTR(created, 4, 2), '-', SUBSTR(created, 1, 2));

然后,将列转换为DATETIME,如下所示:

ALTER TABLE invoices MODIFY created DATETIME;

希望这会有所帮助。