SELECT data->>’property’FROM mytable WHERE data->>’property’IS NOT NulL;
我也尝试过使用NOTNulL.
当我运行其中任何一个时,我收到错误42883. “错误:运算符不存在.JsONB->>布尔提示:没有运算符匹配给定的名称和参数类型.您可能需要添加显式类型转换.”
我很快测试了你的问题,发现没问题:patrick@brick:~$psql -d testpsql (9.5.0)Type "help" for help.test=# CREATE table mytable (ID serial PRIMARY KEY,data Jsonb);CREATE tabletest=# INSERT INTO mytable (data) VALUES('{"ip": "192.168.0.1","property": "router"}'),('{"ip": "127.0.0.1","property": "localhost"}'),('{"ip": "192.168.0.15","property": null@H_403_13@}');INSERT 0 3test=# SELECT * FROM mytable; ID | data----+---------------------------------------------- 1 | {"ip": "192.168.0.1","property": "router"} 2 | {"ip": "127.0.0.1","property": "localhost"} 3 | {"ip": "192.168.0.15","property": null@H_403_13@}(3 rows)test=# SELECT data->>'property' FROM mytable WHERE data->>'property' IS NOT NulL; ?column?----------- router localhost(2 rows)
请注意,在Jsonb中,应该在输入时精确指定NulL值(如上例所示),而不是某些引用版本.如果值不是NulL但是空字符串或类似’< null>‘的值(字符串)然后你应该调整你的测试来寻找:WHERE data->>’property’=”.如果是这种情况,您可以考虑使用Jsonb_set()将这些值设置为真正的Json null.
顺便说一下,你也可以这样做:
SELECT data->>'property' FROM mytable WHERE data->'property'@H_403_13@ IS NOT NulL;
即测试Jsonb值为NulL而不是其强制转换为文本.更高效,当然在更大的桌子上.这显然只适用于真正的空值.
总结以上是内存溢出为你收集整理的postgresql – 在Postgres中从JSONB字段中取出的非SELECT值全部内容,希望文章能够帮你解决postgresql – 在Postgres中从JSONB字段中取出的非SELECT值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)