【问题标题】:convert wierd timestamp format to normal?将奇怪的时间戳格式转换为正常格式?
【发布时间】:2021-05-27 21:50:03
【问题描述】:

2021-05-06T02:21:20.000000Z

所以我得到了这种 ISO 8601 格式的时间戳,但它的中间有那个 T 而不是空格。不知道如何在 SQL select 语句中编写脚本以转换为正常的时间戳 Numberic:Continuous 格式。

选择 时间戳 ,from_unixtime(时间戳)

【问题讨论】:

  • 您使用什么 RDBMS(SQL 风格)?日期/时间函数没有完全标准化。 SQL Server、mySQL、Oracle、...?
  • T 是 ISO-8601 日期+时间字符串的一部分,顺便说一句。它应该在那里,任何声称处理该格式的东西都应该理解它。

标签: sql unix iso8601


【解决方案1】:

我假设您使用的是 MySQL,因为您引用了 from_unixtime() 函数。该函数用于将 32 位整数转换为日期时间,它无法解析日期时间的字符串表示形式。

MySQL 确实存在 ISO8601 格式的问题。它可以读取它,但它会在“Z”处感到困惑:

mysql> select '2021-05-06T02:21:20.000000Z' + interval 0 minute as d;
+---------------------+
| d                   |
+---------------------+
| 2021-05-06 02:21:20 |
+---------------------+
1 row in set, 1 warning (0.00 sec)

mysql> show warnings;
+---------+------+-------------------------------------------------------------------+
| Level   | Code | Message                                                           |
+---------+------+-------------------------------------------------------------------+
| Warning | 1292 | Truncated incorrect datetime value: '2021-05-06T02:21:20.000000Z' |
+---------+------+-------------------------------------------------------------------+

如果我们省略“Z”,一切都很好:

mysql> select '2021-05-06T02:21:20.000000' + interval 0 minute as d;
+---------------------+
| d                   |
+---------------------+
| 2021-05-06 02:21:20 |
+---------------------+
1 row in set (0.00 sec)

因此,只需在 SQL 中或在将 ISO8601 字符串值传递给 SQL 之前删除“Z”即可:

mysql> select replace('2021-05-06T02:21:20.000000Z', 'Z', '') + interval 0 minute as d;
+---------------------+
| d                   |
+---------------------+
| 2021-05-06 02:21:20 |
+---------------------+
1 row in set (0.00 sec)

【讨论】:

    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2012-09-17
    • 2021-06-15
    • 2017-04-29
    • 1970-01-01
    • 2021-12-21
    • 2019-02-25
    • 2014-10-26
    相关资源
    最近更新 更多