Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将wierd时间戳格式转换为普通格式?_Sql_Unix_Iso8601 - Fatal编程技术网

Sql 将wierd时间戳格式转换为普通格式?

Sql 将wierd时间戳格式转换为普通格式?,sql,unix,iso8601,Sql,Unix,Iso8601,2021-05-06T02:21:20.000000Z 我在这个ISO 8601格式中获得时间戳,但是它在中间而不是空间。不知道如何在SQL select语句中编写脚本,将其转换为正常的时间戳Numberic:Continuous格式 挑选 时间戳 ,from_unixtime(timestamp)我假设您使用的是MySQL,因为您引用了from_unixtime()函数的。该函数用于将32位整数转换为datetime,但它无法解析datetime的字符串表示形式 MySQL确实存在ISO860

2021-05-06T02:21:20.000000Z

我在这个ISO 8601格式中获得时间戳,但是它在中间而不是空间。不知道如何在SQL select语句中编写脚本,将其转换为正常的时间戳Numberic:Continuous格式

挑选 时间戳
,from_unixtime(timestamp)

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

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)

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