salika示例模式中的actor表将last_update列定义为时间戳。我想使用JSON_ARRAY以ISO8601格式呈现该列。 -首先不应该将其作为JSON_ARRAY的默认呈现。
通过阅读该网站以及其他网站上的文档和评论,看来答案是将FROM_UNXTIME与生成ISO8601格式的输出掩码一起使用。
不幸的是,FROM_UNIXTIME()似乎总是在我的数据库上返回NULL
mysql> select current_timestamp();
+---------------------+
| current_timestamp() |
+---------------------+
| 2018-10-03 17:15:03 |
+---------------------+
1 row in set (0.00 sec)
mysql> select from_unixTime(current_timestamp())
-> ;
+------------------------------------+
| from_unixTime(current_timestamp()) |
+------------------------------------+
| NULL |
+------------------------------------+
1 row in set (0.00 sec)
mysql>
我怀疑这可能是由于我没有安装时区配置文件引起的。但是当我尝试时,我得到了...
mysql -u root -p****** sys <timezone_posix.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1146 (42S02) at line 1: Table 'sys.time_zone' doesn't exist
我肯定在这里错过了明显的事情。...
答案 0 :(得分:0)
这最终对我有用...
select json_array("actor_id","first_name","last_name",DATE_FORMAT(convert_tz("last_update", @@session.time_zone, '+00:00'),'%Y-%m-%dT%T%fZ')) "json" from "sakila"."actor"
/
给出
[
1,
"PENELOPE",
"GUINESS",
"2006-02-15T12:34:33000000Z"
],
[
2,
"NICK",
"WAHLBERG",
"2006-02-15T12:34:33000000Z"
]
答案 1 :(得分:0)
只需尝试一下:
SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(CURRENT_TIMESTAMP()));
正如mysql doc所说,函数FROM_UNIXTIME(unix_timestamp[,format])
仅接受参数为UNIX_TIMESTAMP
,而不接受TIMESTAMP
。
幸运的是,有一个函数UNIX_TIMESTAMP(date)
可以将DATE
,TIMESTAMP
等各种类型转换为UNIX_TIMESTAMP
。因此,首先调用UNIX_TIMESTAMP(date)
,然后调用`FROM_UNIXTIME(