将MySQL中所有行的文本时间戳转换为日期时间

时间:2018-08-29 19:54:55

标签: mysql datetime timestamp

我将数据和模式从XML文件导入到MySQL中。在相当多的表格中都有以下几列:

DateStart     tinytext
DateEnd       tinytext

其格式类似于时间戳,即。 2006-06-01T00:00:00-05:00 其中一些值也是null。我需要一种方法将此tinytext时间戳转换为普通的MySQL datetime,但不确定如何。

我试图创建一个my_date_time类型的新列datetime,并尝试像这样转换每个值:

UPDATE table SET my_date_time = str_to_date(DateStart, '%Y-%m-%d');

但是这给了我以下错误:

Data truncation: Incorrect date value: '2006-09-01T00:00:00-05:00' for column 'DateStart' at row 1

我应该如何转换这些列的所有行中的所有值?

1 个答案:

答案 0 :(得分:0)

您可以创建一个新字段:

SELECT
  DateStart,
  DateEnd,
  CAST(DateStart AS DATETIME) AS my_date_time
FROM [your_table]

或者您可以使用以下方法向表中添加新列:

UPDATE [your_table] SET my_date_time = CAST(DateStart AS DATETIME);

如果只希望日期,可以将其转换为DATE,而不是DATETIME

但这不会照顾时区。

如果您的值具有不同的时区,则可以使用:

UPDATE [your_table] SET my_date_time = DATE_ADD(CAST('2006-09-01T00:00:00-05:00' AS DATETIME), INTERVAL CAST(substr('2006-09-01T00:00:00-05:00',20,3) AS SIGNED) HOUR);

仅当时区中的所有更改都是完整小时(而不是半小时)时,此功能才有效。

希望有帮助