Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在postgresql中转义某些字符_Postgresql - Fatal编程技术网

如何在postgresql中转义某些字符

如何在postgresql中转义某些字符,postgresql,Postgresql,我在postgresql的一列中有这些数据 { "geometry":{ "status":"Point", "coordinates":[ -122.421583, 37.795027 ] }, 我用他的提问 select*来自学生,其中包含数据,如“%status%” 上面的查询返回结果,但此查询不返回 select*来自学生,其中包含数据,如“%st

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

{
    "geometry":{
        "status":"Point",
        "coordinates":[
            -122.421583,
            37.795027    
        ]          
    },
我用他的提问

select*来自学生,其中包含数据,如“%status%”

上面的查询返回结果,但此查询不返回

select*来自学生,其中包含数据,如“%status:%”


如何解决这个问题当然第二个没有找到匹配项,值中没有
状态:
文本。我想你想要:

select * from students where data_json LIKE '%"status":%' 
。。。然而,与大多数尝试对结构化数据进行文本模式匹配的情况一样,这通常是一个可怕的想法,会让你感到痛苦。仅举几个问题示例:

{
    "somekey": "the value is \"status\": true"
}
。。。其中
“状态”:
显示为文本值的一部分,即使不应该匹配,也会匹配,并且:

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

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


此时,您可能会想“为什么我不使用正则表达式呢?”。不要这样说,您不想尝试在regex中编写完整的JSON解析器

我能用hstore做那种类型的吗search@user194932147
hstore
是平面的,没有嵌套键。您可能会编写代码,将
json
扁平化为
hstore
并忽略/覆盖重复的密钥,但这(a)有点不安全,(b)需要您完成大部分工作,以便正确搜索json密钥。正如我所说的,使用PL/V8、PL/Perl或类似工具来编写一个键查找函数或查找其他人已经编写的函数。可以在键查找函数上创建函数索引。