如何使用MySQL查询JSON对象内未修改的时间戳?
How to query the unmodified timestamp inside a JSON object using MySQL?
我想查询一个包含名为 '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() returns 一些常用选项的格式字符串。但是不支持ISO 8601格式(说明书上特别注明了,好像这个问题以前也有人问过)。
-- formats in ISO 9075 like '%Y-%m-%d %H:%i:%s', NOT ISO 8601
DATE_FORMAT(time, GET_FORMAT(DATETIME, 'ISO'))
我想查询一个包含名为 '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() returns 一些常用选项的格式字符串。但是不支持ISO 8601格式(说明书上特别注明了,好像这个问题以前也有人问过)。
-- formats in ISO 9075 like '%Y-%m-%d %H:%i:%s', NOT ISO 8601
DATE_FORMAT(time, GET_FORMAT(DATETIME, 'ISO'))