我在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:%' ;
如何修复
答案 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