【问题标题】:Compare Timestamp with date in sequelize query在 sequelize 查询中将时间戳与日期进行比较
【发布时间】:2021-11-28 07:49:02
【问题描述】:

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

【问题讨论】:

    标签: javascript node.js postgresql sequelize.js timestamp-with-timezone


    【解决方案1】:

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

    例如:

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

    【讨论】:

    • 完美!谢谢
    • 谢谢。拯救我的一天
    【解决方案2】:

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

    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']],
            });
    

    生成的查询:

    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;
    

    【讨论】:

      【解决方案3】:

      以上两个答案都可以正常工作。他们都使用sequelize.fn(),这不是强制性的。 我对使用 sequelize.fn() 没有任何问题,但我认为我的解决方案更具可读性 - 选择适合您的。

      这是我解决这个问题的方法(使用 MomentJS - 和 TypeScript):

      首先确定你的界限(开始日期,结束日期):

      const beginningOfDay = moment(dateToFetch, 'YYYY-MM-DD').startOf('day');
      const endOfDay = moment(dateToFetch, 'YYYY-MM-DD').endOf('day');
      

      接下来,构建您的查询(我碰巧使用的是三元):

      const args : any = mostRecent ? {  where: { user_uid }, order: [['log_timestamp', 'DESC']] } : { where: { user_uid, log_timestamp: {
                  [Op.gte]: beginningOfDay,
                  [Op.lte]: endOfDay,
              }},
          };
      

      最后 - 执行查询:

      const userMessages: IUserMessages = await models.message.findAll(args);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-23
        • 1970-01-01
        • 2017-05-04
        • 1970-01-01
        • 2020-04-22
        • 2014-09-30
        相关资源
        最近更新 更多