繁体   English   中英

模仿 [colA] 和 [colB] 之间的 [condition] 续集

[英]Mimic where [condition] between [colA] and [colB] sequelize

寻求在 sequelize 中复制以下 mssql 操作的帮助。 我们有一个包含 valid_from 和 valid_to 列的表,我需要获取今天的当前日期,并且只返回基于该日期的记录。

我希望在 sequelize 中使用 .findByPK() 或 .findAll() 方法

SELECT * FROM [table] WHERE GETUTCDATE() BETWEEN f.valid_from AND f.valid_to 

我发现以下帖子和项目没有运气。 因为他们似乎在同一列之间指定了两个不同的日期。 我需要比较两个不同列之间的当前 UTCDATE

Sequelize Query 查找日期范围内的所有记录

Sequelize 查询 - 比较两列中的日期

我能够模拟,但仍然想知道是否有人知道如何使用between运算符做同样的事情

const now = new Date();
            return await models.Form.findAll({
                where: {
                    valid_from: {
                        [Op.lte]: Sequelize.cast(now, 'DATETIMEOFFSET')
                    },
                    [Op.and]: {
                        validTo: {
                            [Op.gte]: Sequelize.cast(now, 'DATETIMEOFFSET')
                        }
                    }
                }
            });

您可以使用sequelize.where()编写此查询来为 BETWEEN 操作生成 WHERE 语句。 对于当前时间戳,您需要调用GETUTCDATE() ,我们可以通过sequelize.fn()进行。

const forms = await models.Form.findAll({
  where: {
    // create where condition for GETUTCDATE()
    sequelize.where(sequelize.fn('GETUTCDATE'), {
      // BETWEEN valid_from AND validTo
      [Op.between]: [
        sequelize.col('valid_from'), 
        sequelize.col('validTo')
      ],
    }),
  },
});

这将生成 SQL ,如:

SELECT * FROM `form`
WHERE GETUTCDATE() BETWEEN `valid_from` AND `validTo`

请注意,您在示例中强调了valid_from和 camelCase validTo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM