我正在尝试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;