JSONB查询-GREATER THAN或LESS THAN运算符



我对JSON和从JSON查询数据很陌生。说到这里,我想用额外的过滤选项来改进查询——GREATER THAN和LESS THAN。现有规则集查询如下(如果选择了=运算符(

{(id = 111 AND (data @> jsonb_build_object('field', '100')))}

我已经了解到,如果左边的数据与右边的数据匹配,@>操作符会进行检查。现在,我想检查一下,这个数据是大于还是小于。

我尝试使用运算符本身(><(,并尝试添加GREATER THANLESS THAN,例如:

{(id = 111 AND (GREATER THAN data @> jsonb_build_object('field', '100')))}

这种查询可能吗,或者我需要完全不同的东西?提前感谢大家!

不知怎么的,我自己想出来的。

一直以来,我都试图用错误的方式解决这个问题。

为了实现这一点,我需要:

  1. 使用->>运算符从对象中获取值。这将指定密钥的值返回为string

(data->>'fieldName')

(jsonb_build_object('fieldName','fieldValue')->>'fieldName')

(参考:https://www.postgresql.org/docs/current/functions-json.html表格9-44(;

  1. 将值从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#代码的帮助下生成的,所以当你添加值时,你可以在应用它的不同对象之间进行更改,这部分查询更有意义。

相关内容

最新更新