1

我在 postgresql 的一列中有这些数据

{
    "geometry":{
        "status":"Point",
        "coordinates":[
            -122.421583,
            37.795027    
        ]          
    },

我用他的查询

select * from students where data_json LIKE '%status%' ;

上面的查询返回结果,但这个没有

select * from students where data_json LIKE '%status:%' ;

如何解决这个问题

4

1 回答 1

3

当然,第二个找不到匹配项,status:值中没有文本。我想你想要:

select * from students where data_json LIKE '%"status":%' 

...但是,与您尝试对结构化数据进行文本模式匹配的大多数情况一样,这通常是一个糟糕的想法,会咬到您。只是几个问题示例:

{
    "somekey": "the value is \"status\": true"
}

... where"status":作为文本值的一部分出现并且即使不应该匹配也会匹配,并且:

{
    status : "blah"
}

wherestatus没有引号,引号和冒号之间有空格。就 JavaScript 而言,这与 相同,"status":但不匹配。

如果您尝试在 json 中查找字段或从 json 中提取字段,请使用 json 解析器。PL/V8 可能感兴趣,或者 json 库可用于 pl/perl、pl/pythonu 等工具。未来的 PostgreSQL 版本将具有通过路径获取 json 键、测试 json 值是否存在等功能,但是9.2 没有。

此时您可能会想“我为什么不使用正则表达式”。不要去那里,您不想尝试在正则表达式中编写完整的 JSON 解析器。这个博客条目有点相关

于 2013-04-03T04:52:37.953 回答