首页 > 解决方案 > 如何将varchar转换为日期时间,不起作用

问题描述

我已将文本文件中的一些列导入到我的表中stuff

我必须将日期导入为varchar(255). 我想将数据类型从转换varchardatetime.

日期数据格式为:

6/2/2018 3:00:00 PM
6/2/2018 4:00:00 PM
6/2/2018 5:00:00 PM

我尝试了以下但没有成功:

select datum from stuff str_to_date(datum, %d/%m/%Y)

和 :

select datum from stuff where convert(datetime,datum,103);

标签: mysqlsql

解决方案


您的查询语法不正确。

STR_TO_DATE()确实是为了将字符串转换为日期。作为第二个参数,它需要一个表示输入字符串格式的字符串(不是文字字符串!)。

鉴于您的日期格式,您可以使用:

SELECT STR_TO_DATE('6/2/2018 3:00:00 PM', '%e/%c/%Y %l:%i:%s %p')

格式说明符详细信息:

  • %e: 日期,数字 ( 0..31)
  • %c: 月份,数字 ( 0..12)
  • %Y:年份,数字,四位数
  • %l: 小时 ( 1..12)
  • %i: 分钟,数字 ( 00..59)
  • %s: 秒 ( 00..59)
  • %pAMPM

DB Fiddle 上的演示


如果您实际上正在寻找转换列的数据类型,那么您需要创建一个临时列,使用转换后的数据对其进行更新,然后删除原始列并重命名临时列,例如:

ALTER TABLE stuff ADD (datum_new datetime);
UPDATE stuff SET datum_new = STR_TO_DATE(datum, '%e/%c/%Y %l:%i:%s %p');
ALTER TABLE stuff DROP datum;
ALTER TABLE stuff CHANGE COLUMN datum_new datum datetime;

如果您使用的是 MySQL 8.0,最后一条语句可以写成:

ALTER TABLE stuff RENAME COLUMN datum_new TO datum;

推荐阅读