Mysql Regexp按编号选择

时间:2014-06-26 22:06:07

标签: php mysql json

大家好我在数据库中有一个字段作为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里面做一个选择,其中一些数字大于...

谢谢大家未来的帮助。

2 个答案:

答案 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

我还没有尝试过,但想知道它是否适合你。