如何在postgresql中转义一些字符

时间:2013-04-03 04:48:21

标签: postgresql

我在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:%' ;

如何修复

1 个答案:

答案 0 :(得分:3)

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

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

...但是,像大多数情况下,您尝试在结构化数据上进行文本模式匹配,这通常是一个会让您感到困扰的可怕的想法。只是几个问题的例子:

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

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

{
    status : "blah"
}

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

如果您正在尝试在json中查找字段或从json中提取字段,请使用json解析器执行此操作。 PL/V8 may be of interest,或者可用于pl / perl,pl / pythonu等工具的json库。将来PostgreSQL版本将具有通过路径获取json密钥的函数,测试是否存在json值等,但是9.2不

此时你可能会想“为什么我不使用正则表达式”。不要去那里,你想要尝试在正则表达式中编写完整的JSON解析器。 this blog entry is somewhat relevant