我对JSON和从JSON查询数据很陌生。说到这里,我想用额外的过滤选项来改进查询——GREATER THAN和LESS THAN。现有规则集查询如下(如果选择了=
运算符(
{(id = 111 AND (data @> jsonb_build_object('field', '100')))}
我已经了解到,如果左边的数据与右边的数据匹配,@>
操作符会进行检查。现在,我想检查一下,这个数据是大于还是小于。
我尝试使用运算符本身(>
和<
(,并尝试添加GREATER THAN
或LESS THAN
,例如:
{(id = 111 AND (GREATER THAN data @> jsonb_build_object('field', '100')))}
这种查询可能吗,或者我需要完全不同的东西?提前感谢大家!
不知怎么的,我自己想出来的。
一直以来,我都试图用错误的方式解决这个问题。
为了实现这一点,我需要:
- 使用
->>
运算符从对象中获取值。这将指定密钥的值返回为string
(data->>'fieldName')
(jsonb_build_object('fieldName','fieldValue')->>'fieldName')
(参考:https://www.postgresql.org/docs/current/functions-json.html表格9-44(;
- 将值从
string
转换为numeric
类型,因此现在可以对它们进行比较(参考:https://www.postgresql.org/docs/current/sql-expressions.html4.2.9。类型铸造(
(data->>'fieldName')::NUMERIC
(jsonb_build_object('fieldName','fieldValue')->>'fieldName')::NUMERIC
最终结果看起来像这样-(data->>'fieldName')::NUMERIC > (jsonb_build_object('fieldName', 'fieldValue')->>'fieldName')::NUMERIC
希望这能帮助以后的人:(
第页。S-这个SQL是C#Web应用程序的一部分,是在C#代码的帮助下生成的,所以当你添加值时,你可以在应用它的不同对象之间进行更改,这部分查询更有意义。