mysql - 如何使用 MySQL 查询 JSON 对象内未修改的时间戳?

标签 mysql json timestamp iso8601

我想查询一个包含名为“time”的 MySQL TIMESTAMP 的 JSON 对象:

SELECT time, JSON_OBJECT('t', time, 'v', value) AS value FROM values

但不幸的是,MySQL 会将 ISO 8601 格式的时间戳 "2019-04-04T12:00:00.000Z" 自动转换为此演示文稿 "2019-04-04 12:00:00.000000 “。请参阅以下回复:

{
  "time": "2019-04-04T12:00:00.000Z",
  "value": {
    "t": "2019-04-04 12:00:00.000000",
    "v": 30
  }
}

是否可以在 JSON 对象内访问保留其原始类型和表示形式(如 "2019-04-04T12:00:00.000Z")的时间?推荐的、干净的方法是什么?

最佳答案

您可以使用DATE_FORMAT()在表达式中创建 ISO 8601 格式日期。

参见Format date in MySQL SELECT as ISO 8601

就您而言:

SELECT DATE_FORMAT(time, '%Y-%m-%dT%TZ'), 
  JSON_OBJECT('t', DATE_FORMAT(time, '%Y-%m-%dT%TZ'), 'v', value) AS value 
FROM values

或者:

SELECT v.time_8601, JSON_OBJECT('t', v.time_8601, 'v', v.value) AS value
FROM (SELECT DATE_FORMAT(time, '%Y-%m-%dT%TZ') AS time_8601, value FROM values) AS v

回复您的评论:

https://dev.mysql.com/doc/refman/8.0/en/datetime.html说:

MySQL retrieves and displays DATETIME values in 'YYYY-MM-DD HH:MM:SS' format.

最简单的方法是使用该格式。如果要使用不同的格式(甚至是 ISO 格式),则必须使用 DATE_FORMAT() 和 STR_TO_DATE() 函数。

有一个函数GET_FORMAT()返回一些流行选择的格式字符串。但它不支持 ISO 8601 格式(手册中特别指出,好像这个问题以前曾出现过)。

-- formats in ISO 9075 like '%Y-%m-%d %H:%i:%s', NOT ISO 8601
DATE_FORMAT(time, GET_FORMAT(DATETIME, 'ISO'))

关于mysql - 如何使用 MySQL 查询 JSON 对象内未修改的时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680353/

相关文章:

php - 具有不同列的多个 CSV 到 MySQL

php - HTTP Post 到 MySQL 插入空白行

php - 通过从 MySQL 获取 id 将 $_SESSION ['name' ] 更改为 $_SESSION['id]

ruby-on-rails - 事件记录/PG : support automatic timestamps in DDL

sql - 表/字段设置所需的示例/示例

json - Twitter Rest API 调用 lookup.json 总是给出代码 17 错误

javascript - AngularJS 更新 JSON 文件

javascript - 使用 json_encode 将十进制值 php 传递给 javascript

Python:将 Varbinary 类型时间戳转换为 unix 时间戳

SQLite ORDER BY 时间戳没有给出预期结果