2

我正在尝试json/sql path在过程中动态构建查询。

profile @? '$.timezone ? (@ like_regex "auck" flag "i")';

在上面我想要动态timezone构建auck

到目前为止,我有以下

end_user.profile @? format('$.%I ? (@ like_regex "%I" flag "i")', condition.field, replace(replace(condition.value,'\', '\\'),'"','\"'))::jsonpath

由于需要用引号括起来并转义正则表达式,它看起来不像是最优雅的代码。

直接字符串匹配看起来像这样

end_user.profile @? format('$.%I ? (@ == "%s")',condition.field, replace(condition.value,'"','\"'))::jsonpath

我希望有更好更安全的方法来做到这一点。

我正在尝试更新一些以类似方式工作的代码,而不使用我在下面截取的 json/sql。

create function private.end_user_profile_filter(end_user private.end_user, condition private.profile_filter)
returns boolean as $$
  select    case
    when condition.condition = 'REGEX_MATCH'
        then end_user.profile->>condition.field ~* condition.value
    else
      end_user.profile->>condition.field = condition.value
 end;
$$ language sql stable;
4

0 回答 0