【问题标题】:Converting a text timestamp to a datetime for all rows in MySQL将文本时间戳转换为 MySQL 中所有行的日期时间
【发布时间】:2018-08-29 19:54:55
【问题描述】:

我将 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

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

【问题讨论】:

  • 请参阅stackoverflow.com/questions/10636152/… - 您的格式字符串与您的日期格式不匹配,但看起来它会变得比这更复杂,因为它看起来像 str_to_date 不包括一种以该格式解析时区的机制。

标签: mysql datetime timestamp


【解决方案1】:

您可以创建一个新字段:

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

仅当时区的所有更改都是整小时(而不是半小时)时才有效。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2012-09-06
    • 2013-09-27
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多