【发布时间】:2021-04-24 08:49:39
【问题描述】:
当我尝试将值与 JSON_EXTRACT 进行比较时遇到了一个奇怪的问题。
这是我在数据库中的 opening_hours 专栏的摘录:
{"1": {"end": {"max_hour": "1290", "min_hour": "840"}, "begin": {"max_hour": "720", "min_hour": "420"}},
"2": {"end": {"max_hour": "1290", "min_hour": "840"}, "begin": {"max_hour": "720", "min_hour": "420"}},
"3": {"end": {"max_hour": "1290", "min_hour": "840"}, "begin": {"max_hour": "720", "min_hour": "420"}},
"4": {"end": {"max_hour": "1290", "min_hour": "840"}, "begin": {"max_hour": "720", "min_hour": "420"}},
"5": {"end": {"max_hour": "1290", "min_hour": "840"}, "begin": {"max_hour": "720", "min_hour": "420"}}}
例如,当我搜索“720”是否介于一天中每个部分(开始和结束)的 min_hour 和 max_hour 之间时,我得到了结果:
SELECT *
FROM `service_provider`
WHERE ((JSON_EXTRACT(`opening_hours`, '$."3"."begin"."min_hour"') <= '720'
AND '720' <= JSON_EXTRACT(`opening_hours`, '$."3"."begin"."max_hour"'))
OR (JSON_EXTRACT(`opening_hours`, '$."3"."end"."min_hour"') <= '720'
AND '720' <= JSON_EXTRACT(`opening_hours`, '$."3"."end"."max_hour"')));
====> 得到了一些结果!
但是当我用“1200”做同样的事情时,没有找到结果:
SELECT *
FROM `service_provider`
WHERE ((JSON_EXTRACT(`opening_hours`, '$."3"."begin"."min_hour"') <= '1200'
AND '1200' <= JSON_EXTRACT(`opening_hours`, '$."3"."begin"."max_hour"'))
OR (JSON_EXTRACT(`opening_hours`, '$."3"."end"."min_hour"') <= '1200'
AND '1200' <= JSON_EXTRACT(`opening_hours`, '$."3"."end"."max_hour"')));
-----> 没有结果。
但它在“840”和“1290”之间。
我注意到只有在“720”之前或等于的数字给出了结果,所以它没有考虑我查询的第二部分(在 OR 之后)。为什么 ?谢谢。
【问题讨论】: