gpt4 book ai didi

javascript - Postgres/Sequelize - 有条件地在查询中附加子句

转载 作者:行者123 更新时间:2023-12-03 22:36:22 24 4
gpt4 key购买 nike

我有一个有一些记录的表。我必须在两个日期之间或给定日期之后/之前过滤这些记录,或者如果没有日期通过,则根本不过滤。日期来自服务器路由有效负载。查询是这样的:

select * from table where "id"=4 and (s2."createdAt" >= date("createdAt") and s2."createdAt" <= date("createdAt"))

在这里,要么先 createdAt如果查询没有 and 子句并且将在 "id"=4 处完成,则可以给出,或者第二个,或者根本没有给出。 .我正在使用 sequelize 编写原始查询和 JavaScript/NodeJS 来实现。这是代码:

query = await sequelize.query(`select * from "Stores" s2 where "Id" = ${user.id} and (s2."createdAt" >='${param.fromDate}' and s2."createdAt <='${param.toDate}') group by date("createdAt")`);


目前,我正在编写 4 个不同的 if/else 案例,其中有 4 个与日期可用性相关的不同查询。我如何通过仅定义一个查询并在可用时附加日期来使其动态化?

最佳答案

你可以这样做:

where 
id = :user.id
and (:param_from_date is null or s2."createdAt" >= :param_from_date)
and (:param_to_date is null or s2."createdAt" <= :param_to_date)

这可以缩短为:
where 
id = :user_id
and s2."createdAt" >= coalesce(:param_from_date, s2."createdAt")
and s2."createdAt" <= coalesce(:param_to_date, s2."createdAt")

请注意,这些表达式使用查询参数而不是查询字符串中的值。您确实希望使用参数化查询来保护您的查询免受 SQL 注入(inject)并提高它们的效率。

关于javascript - Postgres/Sequelize - 有条件地在查询中附加子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59879608/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com