MySQL-按时间转换json提取的数据

MySQL-按时间转换json提取的数据,mysql,json,datetime,Mysql,Json,Datetime,在从JSON类型的数据中提取时,是否有比较小时数的方法 目前我有以下问题: SELECT * FROM (SELECT clinics.id as cid, clinics.lat, clinics.lng, clinics.opening_hours, clinics.logo, clinics.address, clinics.city, clinics.state, clinics.name, clinics.description, clinics.zip, clinics.phone_

在从JSON类型的数据中提取时,是否有比较小时数的方法

目前我有以下问题:

SELECT * FROM
(SELECT clinics.id as cid, clinics.lat, clinics.lng, clinics.opening_hours,
clinics.logo, clinics.address, clinics.city, clinics.state, clinics.name, clinics.description,
clinics.zip, clinics.phone_number, clinics.email, clinics.url, clinics.bookmark_url,
clinics.marker, timezone,
countries.full_name AS country,
(6378 * acos(
cos(radians(-33.8688197)) * cos(radians(lat)) *
cos(radians(lng) - radians(151.2092955)) +
sin(radians(-33.8688197)) * sin(radians(lat))))
AS distance
FROM clinics
JOIN countries ON countries.id = clinics.country_id
LEFT JOIN clinics_services ON clinics.id = clinics_services.clinic_id
WHERE CAST(JSON_EXTRACT(`opening_hours`, '$."wednesday-to"') as time) > CAST('09:00' as time)
GROUP BY clinics.id
) AS distances
WHERE distance < 5
ORDER BY distance ASC
结果:

"17:30"
"19:00"
"12:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"19:00"
"18:00"
"19:00"
"18:00"
"18:00"
"18:00"
"18:00"
"18:00"
"19:00"
但如果我尝试使用此查询将其转换为time,则会得到NULL:

SELECT CAST(JSON_EXTRACT(`opening_hours`, '$."wednesday-to"') as TIME) FROM clinics

我做错了什么?

看来@BillKarwin是对的。您需要用JSON_UNIQUOTE包装JSON_EXTRACT

就你而言:

...
WHERE CAST(JSON_UNQUOTE(JSON_EXTRACT(`opening_hours`, '$."wednesday-to"')) as time) > CAST('09:00' as time)
...

使用JSON“u UNQUOTEJSON”提取。。。函数将已提取的值中的文字双引号去掉。或者只是以规范化的方式存储数据,而忘记JSON。事实上,每次我在MySQL中看到关于JSON的问题时,将数据存储在单独的列中会更容易解决。如果您确定自己的数据格式,您可以只做JSON提取“开放时间”,“美元”。周三到“>”09:00
SELECT CAST(JSON_UNQUOTE(JSON_EXTRACT('{"hour":"10:00"}','$.hour')) as time) > CAST('09:00' as time);
...
WHERE CAST(JSON_UNQUOTE(JSON_EXTRACT(`opening_hours`, '$."wednesday-to"')) as time) > CAST('09:00' as time)
...