我将数据和模式从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
我应该如何转换这些列的所有行中的所有值?
答案 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);
仅当时区中的所有更改都是完整小时(而不是半小时)时,此功能才有效。
希望有帮助