我想从MySQL数据库的JSON类型列查询数据。
我得到一个有效的查询并从JSON字段返回数据:

SELECT
    readouts->"$.temperature_sensor_1.readTimestamp"
 FROM
    `readouts_store`
 WHERE
    `readout_id`=75898

它返回:
"2018-02-04 20:11:53"

但要按日期限制选定的数据,我需要它如下:
SELECT
    readouts->"$.temperature_sensor_1.value"
 FROM
    `readouts_store`
 WHERE
    `application_id`=1
 AND
    readouts->"$.temperature_sensor_1.readTimestamp", '%Y-%m-%d %H:%i:%s' BETWEEN '2018-02-03' AND '2018-02-05'

它不起作用,因此我认为我应该将readouts->"$.temperature_sensor_1.readTimestamp"转换为如下日期类型:
SELECT
    readouts->"$.temperature_sensor_1.value"
 FROM
    `readouts_store`
 WHERE
    `application_id`=1
 AND
    STR_TO_DATE(readouts->"$.temperature_sensor_1.readTimestamp", '%Y-%m-%d %H:%i:%s') BETWEEN '2018-02-03' AND '2018-02-05'

很遗憾,它不起作用,因为STR_TO_DATE()返回空:
SELECT
    STR_TO_DATE(readouts->"$.temperature_sensor_1.readTimestamp", '%Y-%m-%d %H:%i:%s')
FROM
    readouts_store
WHERE
   `readout_id`=75898

我也尝试了DATE()和CONVERT(“”,DATE),但结果是一样的,而不是STR懔TO懔DATE()。
MySQL不支持这样的功能吗?我在这方面的文件中找不到任何参考资料。

最佳答案

当您使用->时,返回值本身就是一个JSON值,因此它似乎有双引号。
使用->>返回去掉引号的“原始”标量值。
有关差异的更多信息,请参见https://dev.mysql.com/doc/refman/5.7/en/json.html

关于mysql - MySQL JSON函数-在DATE之前查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48613111/

10-09 18:20
查看更多