在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
答案 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;
希望这会有所帮助。