如何解决在JSON mysql中的两个iso日期之间搜索
下面是我的 JSON,它保存在 mysql 表的 response
列中
{
"data": {
"submit": false,"lastName": "abc","firstName": "xys"
},"metadata": {},"createDate": "2021-04-23T00:00:00+00:00"
}
现在我想在条件之间进行查询,为此我尝试编写以下查询
SELECT * FROM form_response WHERE DATE_FORMAT(response->'$.data.createDate','%Y-%m-%dT%TZ') BETWEEN "2021-04-22T00:00:00+00:00" AND "2021-04-23T00:00:00+00:00"
但我收到空白回复。
感谢任何帮助
解决方法
SELECT * FROM form_response WHERE DATE_FORMAT(SUBSTR(response->'$.createDate',2,CHAR_LENGTH(response->'$.createDate')-2),'%Y-%m-%dT%TZ' ) 在“2021-04-22T00:00:00+00:00”和“2021-04-23T00:00:00+00:00”之间
,response->'$.data.createDate'
已经返回 null
,所以在那之后没有其他事情了。根据您的数据结构,您想要的是 response->'$.createDate'
。此外,DATE_FORMAT()
从日期转换为字符串。我想你想要STR_TO_DATE()
。最后但同样重要的是,您提供的日期格式标识符与数据使用的格式不匹配。
不要将您的代码视为黑匣子。您可以调试每个处理步骤:
SELECT
response->'$.createDate' AS string,STR_TO_DATE(response->'$.createDate','"%Y-%m-%dT%T+00:00"') AS data
FROM form_response;
+-----------------------------+---------------------+
| string | date |
+-----------------------------+---------------------+
| "2021-04-23T00:00:00+00:00" | 2021-04-23 00:00:00 |
+-----------------------------+---------------------+
在您的情况下,您可以进一步简化它,因为您使用的是 MySQL 识别的标准日期格式:
SELECT
response->'$.createDate' AS string,CAST(response->'$.createDate' AS DATETIME) AS date
FROM form_response;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。