【发布时间】:2022-10-19 16:39:57
【问题描述】:
我以前使用条件模板字符串插值,它看起来像这样:
const queryArgs = {
type,
status,
}
const query = `
SELECT
id,
type,
status,
content
FROM
some_table
WHERE
${type ? "type = $(type)" : ""}
${status ? "AND status = $(status)" : ""}
ORDER BY
id
`
它完成了工作,并且没有违反pg-promise 关于模板字符串插值的规则,因为它不是对输入值进行插值,而是对它们的 args 引用进行插值。
有没有办法为查询文件获取类似的逻辑?许多像这样的过滤器往往是复合的,因此编写过滤器组的每一个组合不是一种选择,特别是因为这些查询将用作 CTE 链的一部分。
【问题讨论】:
-
如果我正确理解了问题,您可以使用
CASE(postgresqltutorial.com/postgresql-tutorial/postgresql-case)。共享链接没有给出在WHERE中使用它的示例,但您会在网上找到一些。 -
在 SQL 文件中使用 Raw Text 过滤器:
${type:raw}和${status:raw},并在代码中格式化条件并以预格式化的形式传递。 -
不,我找到了纯粹在 SQL 文件中编写它们并在需要的地方插入值的方法,因此我将其作为答案发布。
标签: postgresql pg-promise postgresql-13