gpt4 book ai didi

sql - 运算符不存在 : json = json

转载 作者:行者123 更新时间:2023-11-29 11:09:39 25 4
gpt4 key购买 nike

当我尝试从表中选择一些记录时

    SELECT * FROM movie_test WHERE tags = ('["dramatic","women", "political"]'::json)

sql代码抛错

LINE 1: SELECT * FROM movie_test WHERE tags = ('["dramatic","women",...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.

********** 错误 **********

ERROR: operator does not exist: json = json
SQL 状态: 42883
指导建议:No operator matches the given name and argument type(s). You might need to add explicit type casts.
字符:37

我是否遗漏了什么或者我可以在哪里了解有关此错误的信息。

最佳答案

简而言之 - 使用 JSONB 代替 JSON 或将 JSON 转换为 JSONB。

您无法比较 json 值。您可以改为比较文本值:

SELECT * 
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'

但是请注意,JSON 类型的值以给定的格式存储为文本。因此比较的结果取决于您是否始终使用相同的格式:

SELECT 
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!

在 Postgres 9.4+ 中,您可以使用以分解的二进制格式存储的 JSONB 类型来解决此问题。可以比较这种类型的值:

SELECT 
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true

所以这个查询更可靠:

SELECT * 
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb

阅读更多关于 JSON Types 的信息.

关于sql - 运算符不存在 : json = json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32843213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com