MySQL REGEXP +空格(\ s)

时间:2013-03-21 21:09:56

标签: mysql regex json

我使用的数据库以LONGTEXT数据类型存储JSON条目。我希望能够根据JSON数据选择条目。这是一些示例数据:

 {
    "12f9cb0a-2218-4590-a05d-c1ffab00f693":  {
        "0":  {
            "value": "test"
        }
    },
    "4d1dfd2e-7bc1-4303-9c8c-90856e918bb9":  {
        "item":  {
            "0": "11"
        }
    }
 }

所以我想通过过滤空白来选择包含“4d1dfd2e-7bc1-4303-9c8c-90856e918bb9”:{“item”:{“0”:“11”}} 的数据(制表符,空格,新行)使用REGEXP函数,我试过这个无济于事:

SELECT * FROM my_table WHERE (elements REGEXP BINARY '"4d1dfd2e-7bc1-4303-9c8c-90856e918bb9":\s*{\s*"item":\s*{\s*"0":\s*"11"\s*}\s*}');

正则表达式测试使用Rubular和Regexpal.com,但MYSQL似乎不喜欢 \ s * 表达式。有人有更好的解决方案吗?

3 个答案:

答案 0 :(得分:32)

似乎MySQL不支持正则表达式中的\s表示法,只有[[:space:]]表示法(其中[:space:]在字符类中,表示“任何空白字符”)。

顺便提一下,当你需要反斜杠时 - 例如,当你需要一个文字星号\*时 - 你实际上需要加倍反斜杠(例如\\*),如§12.5.2 "Regular Expressions" of the MySQL 5.6 Reference Manual中所述:

  

注意
  因为MySQL在字符串中使用C转义语法(例如,“\n”来表示换行符),所以必须将在\字符串中使用的任何“REGEXP”加倍​​。

答案 1 :(得分:0)

使用字符串替换;

select replace(json, ' ','') from table;

如果您的数据中包含空格,则无效。

答案 2 :(得分:0)

最好使用json类型: SELECT CAST(`column` AS JSON) WHERE JSON_EXTRACT(CAST(`column` as JSON),'$."4d1dfd2e-7bc1-4303-9c8c-90856e918bb9".item."0"')="11"