如何将日期字符串 "yyyy-mm-ddThh:mm:ssZ" 转换为时间戳

How to convert date string "yyyy-mm-ddThh:mm:ssZ" to timestamp

我有一个带有时间戳的 CSV 文件,例如 2018-04-04T00:03:04Z。我创建了一个带有时间戳字段的 table 并用来自 CSV 的数据填充 table,但生成了一个错误:

Incorrect datetime value

而我的 table 根本没有填满;执行 select 查询 returns 0 行。

我尝试使用 str_to_date(date_sale, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'") 但它返回了空值。

之前我创建了 table 并将日期字段作为字符串,一切正常,但现在我需要将此字段转换为时间戳字段以便操作日期。我正在使用 Table 数据导入向导.

填充 table

有人可以帮忙吗?

您应该使用 datetimetimestamp

您可以尝试使用以下方法帮助自己:

SET SESSION SQL_MODE='ALLOW_INVALID_DATES'

如果不需要转换为当地时间,您可以使用正确格式的 str_to_time

select str_to_date('2018-04-04T00:03:04Z', '%Y-%m-%dT%H:%i:%sZ')
-- 2018-04-04 00:03:04

如果需要时区转换,那么您必须确保 timezone related tables are setup correctly 然后使用 convert_tz 函数:

select convert_tz(str_to_date('2018-04-04T00:03:04Z', '%Y-%m-%dT%H:%i:%sZ'), 'zulu', 'system')

正如我一开始所说,您应该将日期更新为有效格式:

UPDATE nf
SET
  date_delivery = DATE_FORMAT(
    STR_TO_DATE(date_delivery, '%Y-%m-%dT%H:%i:%sZ'), '%Y-%m-%d %H:%I'
  ),
  date_sale = DATE_FORMAT(
    STR_TO_DATE(date_sale, '%Y-%m-%dT%H:%i:%sZ'), '%Y-%m-%d %H:%I'
  )
WHERE 1;

完成此步骤后您需要修改 table:

ALTER TABLE nf
    MODIFY date_sale TIMESTAMP,
    MODIFY date_delivery TIMESTAMP;

插入数据时不要忘记格式化:

INSERT INTO nf (id, id_produt, id_category, date_sale, date_delivery)
VALUES
(31, 3, 4, STR_TO_DATE('2012-12-12T00:24Z', '%Y-%m-%dT%H:%i:%sZ'), STR_TO_DATE('2012-12-12T00:24:00Z', '%Y-%m-%dT%H:%iZ:%s')),
(44, 3, 4, STR_TO_DATE('2012-12-12T00:24Z', '%Y-%m-%dT%H:%i:%sZ'), STR_TO_DATE('2012-12-12T00:24:00Z', '%Y-%m-%dT%H:%iZ:%s'))

这种方式更好,因为您可以将数据作为 sql 中的日期时间格式进行操作。

例如,如果您在数据库中有时间戳格式,那么下一个查询不会将您的字符串 date_sale 与字符串 '2013-12-12' 进行比较:

SELECT * FROM nf WHERE date_sale > '2013-12-12';