大家好我在数据库中有一个字段作为json字段
table some_table
field| {"number":34,"name":"john"}
field| {"number":60,"name":"mary"}
field| {"number":44,"name":"mark"}
我想进行查询并选择数字>一些价值
select from some_table where field regexp (get_number) > 40
这可能吗?
我发现这个例子是为了进行正则表达式选择而只是匹配数据
SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"]*)key_word([^"]*)"';
但我想在json里面做一个选择,其中一些数字大于...
谢谢大家未来的帮助。
答案 0 :(得分:2)
首先,我想告诉你,你无法提取正则表达式"捕获"在mysql上,你只能"匹配"
第二,我想告诉你,以下查询只有在" number"是第一个项目
SELECT * FROM some_table WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(field,',',1),':',-1) > 40
这使用mysql的SUBSTRING_INDEX来获取第一个","之前的字符串。 结果是: {"数":34
然后在最后一个"之后得到字符串:" (在这种情况下,也是第一个)
将导致:
34
编辑: 这是允许其他订单
的另一个版本SELECT * FROM some_table WHERE SUBSTRING_INDEX(SUBSTRING_INDEX('{"number":34,"name":"john"}','"number":',-1),",",1) > 40
第一个电话使它:34," name":" john"} 第二次电话会议:34
SUBSTRING_INDEX: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_substring-index
答案 1 :(得分:2)
您是否有能力在MySQL数据库上加载插件?如果是这样,这可能正是您所寻找的:
http://blog.kazuhooku.com/2011/09/mysqljson-mysql-udf-for-parsing-json.html
编译并安装了mysql_json
UDF插件后,您就可以运行如下查询:
SELECT whatever_columns
FROM some_table
WHERE json_get(field, 'number') > 40
我还没有尝试过,但想知道它是否适合你。