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

11dmarpk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(359)

我将数据和模式从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

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

m1m5dgzv

m1m5dgzv1#

您可以创建一个新字段:

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);

只有当时区中的所有更改都是完整的小时(而不是半小时)时,这才有效。
希望有帮助

相关问题