我在这个格式的MySQL数据库中有一个专栏:
{
"monday":[["11:00","19:30"]],
"tuesday":[["11:00","19:30"]],
"wednesday":[["11:00","19:30"]],
"thursday":[["11:00","19:30"]],
"friday":[["11:00","20:00"]],
"saturday":[["11:00","20:00"]],
"sunday":[["11:00","20:00"]]
}
我想我想知道这家餐馆现在是星期五开放时间是14:00
我该如何进行此查询?有办法吗?
我试过了这个查询
SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"]*)key_word([^"]*)"';
但我想首先搜索一天,然后搜索几个小时。我无法弄清楚如何解决它。
答案 0 :(得分:0)
不幸的是,无法使用select查询搜索该类型的数据。使用适当的列类型重构数据库要快得多。如果您坚持保留当前的数据库布局,则需要编写一个sql函数,以便正确解析数据并返回所需内容。
答案 1 :(得分:0)
它远没有效率,我不鼓励你使用这个片段,但这里有你想要的东西。
select json
, openday
, start
, end
, opening
, startopen
, endopen
from (
select json
, openday
, start
, end
, opening
, left(opening, locate(',',opening) - 1) as startopen
, right(opening, locate(',',opening) - 1) as endopen
from (
select json
, openday
, start
, end
, replace(substring(json, start, end - start), '"','') as opening
from (
select json
, openday
, locate('[[', json, openday) + 2 as start
, locate(']]', json, openday) as end
from (
select json
, locate('friday', json) as openday
from `test-regexp`
) as a
) as b
) as c
) as d
where '14:00' between startopen and endopen
我强烈建议使用其他东西来查询这类数据。许多语言已经具有本机解析JSON的功能。
@Karl 注意:您如何使用REGEXP来执行此操作。我无法理解。感谢