在 sequelize 查询中比较时间戳和日期

Vij*_*esh 4 javascript postgresql node.js sequelize.js timestamp-with-timezone

我有一createdAt列将值存储为"2018-11-07 15:03:16.532+00". 我想写这样的查询select * from table_name where createdAt = input_date,其中我input_date的只有日期值2018-11-07。我如何使用 编写此查询Sequelize

sgt*_*oro 12

尝试使用sequelize.fn()参数,例如像这样,尝试调整它。

前任:

TableName.findAll({
  where: sequelize.where(sequelize.fn('date', sequelize.col('createdAt')), '=', '2018-11-07')
})
Run Code Online (Sandbox Code Playgroud)


Gvs*_*hil 5

接受的答案应该可以正常工作,但是如果我们在使用它的地方有多个条件 -

const cashRegisterData = await cashRegisterMain.findAll({
            attributes: ['crmid', 'dateCreated', 'startDate', 'endDate', 'startAmount', 'finalAmount', 'status'],
            where: {
                createdBy: userId,
                [Op.and]: [
                    sequelize.where(sequelize.fn('date', sequelize.col('dateCreated')), '>=', fromDate),
                    sequelize.where(sequelize.fn('date', sequelize.col('dateCreated')), '<=', toDate),
                ]
            },
            order: [['dateCreated', 'DESC']],
        });
Run Code Online (Sandbox Code Playgroud)

生成的查询:

SELECT `crmid`, `dateCreated`, `startDate`, `endDate`, `startAmount`, `finalAmount`, `status` FROM `cashRegisterMain` AS `cashRegisterMain` WHERE (date(`dateCreated`) >= '2020-11-20' AND date(`dateCreated`) <= '2020-11-20') AND `cashRegisterMain`.`createdBy` = 1 ORDER BY `cashRegisterMain`.`dateCreated` DESC;
Run Code Online (Sandbox Code Playgroud)