【问题标题】:MySQL: Changing column type and date time formatMySQL:更改列类型和日期时间格式
【发布时间】:2016-01-01 02:55:57
【问题描述】:

我的数据库当前将“日期”列设置为 varchar(20),我的日期格式如下:

1/13/2015 20:00

我想在我的数据库上运行更新以将列类型更改为日期时间并将我当前日期的格式更改为更典型的格式

yyyy-mm-dd hh:mi

这可以在 MySQL 中完成吗?

【问题讨论】:

  • 不,这不是@community 的答案。他需要使用STR_TO_DATE函数
  • 我可以在 cmets 中看到这一点,但如果有人用 [STR_TO_DATE] 发布完整答案会很棒

标签: mysql sql


【解决方案1】:

使用STR_TO_DATE函数

这是 DATE_FORMAT() 函数的逆函数。它需要一个字符串 str 和格式字符串格式。 STR_TO_DATE() 返回一个 DATETIME 值 如果格式字符串同时包含日期和时间部分,或者一个 DATE 或 如果字符串仅包含日期或时间部分,则为 TIME 值。如果 从 str 中提取的日期、时间或日期时间值是非法的, STR_TO_DATE() 返回 NULL 并产生警告。

查看转换的日期

select str_to_date(date_column, '%m/%d/%Y %h:%i') 
from tablename

确保一切正常,然后运行update 语句

update tablename set date_column = str_to_date(date_column, '%m/%d/%Y %h:%i')

最好将datetime 数据存储在datetime 数据类型中

Alter table tablename modify column date_column datetime 

【讨论】:

    【解决方案2】:

    是的,可以在mysql中完成。由于您现有的数据与 mysql 的日期时间格式不兼容,因此您不能一步完成。

    1. 在更新语句中使用 str_to_date() 函数将文本数据更改为 mysql 的本机日期时间格式 (yyyy-mm-dd hh:mm:ss)。
    2. 使用ALTER TABLE ... MODIFY COLUMN ... 命令将列的数据类型更改为日期时间。

    警告 此转换可能会导致数据更改。例如, 如果缩短字符串列,值可能会被截断。阻止 如果转换为新数据类型,则操作成功 会导致数据丢失,使用前开启严格的SQL模式 ALTER TABLE(请参阅第 5.1.7 节,“服务器 SQL 模式”)。

    第一步是处理数据转换问题,但是,在第二步之前启用严格的 sql 模式是一个很好的做法。如果您不确定,则创建另一个日期时间列并使用 str_to_date() 更新其值,以并排查看原始值和转换后的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多