Mysql Regexp Select By Number


Mysql Regexp Select By Number

嗨,伙计,我有一个字段在数据库作为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

这可能吗?


我发现这个例子使一个regexp选择,但只匹配数据

SELECT id FROM table_name WHERE field_name REGEXP '"key_name":"([^"]*)key_word([^"]*)"';

但我想在json中进行选择其中某个数字大于。

感谢大家今后的帮助。

首先,我想告诉你,你不能在mysql上提取正则表达式"捕获",你只能"匹配"

第二,我想告诉你,只有当"number"是第一项

时,下面的查询才有效
SELECT * FROM some_table WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(field,',',1),':',-1) > 40

使用mysql的SUBSTRING_INDEX来获取第一个","之前的字符串。结果是:{number: 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

你有能力在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

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