【问题标题】:Sequelize query nodejs续集查询nodejs
【发布时间】:2018-12-05 16:40:55
【问题描述】:

我需要根据年龄过滤“收入者”,但在表中我只有出生日期。我需要最小和最大年龄之间的人,我该怎么做?

router.post('/', function (req, res, next) {
    let parameters = JSON.parse(req.body.parameters);
    parameters.states = parameters.states.split();
    parameters.species = parameters.species.split();

    model.person.findAll({
        where: {
            uf: parameters.states,
            species: parameters.species,
            dateBirth: BETWEEN PARAMETERS.MINAGE AND PARAMETERS.MAXAGE
        }
    })
        .then(person => res.json({
            error: false,
            data: person
        }))
        .catch(error => res.json({
            error: true,
            data: [],
            error: error
        }));
});

【问题讨论】:

    标签: javascript node.js orm sequelize.js


    【解决方案1】:

    您可以使用between 运算符:

    model.person.findAll({
        where: {
            uf: parameters.states,
            species: parameters.species,
            dateBirth: {
              [Op.between]: ['2000-01-01', '2020-01-01'],
            }
        }
    })
    

    【讨论】:

      【解决方案2】:

      你可以像这样使用它:

      var startAge = 18;
      var endAge = 20;
      
      var today = moment();
      var startDate = today.subtract('years', startAge);
      var endDate = today.subtract('years', endAge);
      
      model.person.findAll({
          where: {
              uf: parameters.states,
              species: parameters.species,
              dateBirth: : {
                  $between: [startDate, endDate]
              }
          }
      })
      

      【讨论】:

      • 但参数是年龄 startAge: 18, endAge: 20, 出生日期是这样的日期:“YYYY / MM / DD”
      • 意味着你需要在 18 和 20 年前出生,对,所以开始日期是 1998 年 1 月 1 日,结束日期是 2000 年 12 月 31 日,:) @FilippeOliveiraDaSilvaRodr跨度>
      • @FilippeOliveiraDaSilvaRodr,请检查更新的答案,我已经通过使用moment js展示了。
      【解决方案3】:

      您可以在 where 中使用原始查询,例如 -

      var Sequelize = require("sequelize");
      var now = '2010-01-01';//Current Date
      
      model.person.findAll({
          where: Sequelize.literal('( (ud IN ('+parameters.states+')) AND (species IN ('+parameters.species+')) AND ((DATE_FORMAT(FROM_DAYS(DATEDIFF(dob,'+now+')), "%Y")+0) BETWEEN '+minDate+' AND '+maxDate+')  )')
      })
      

      【讨论】:

        猜你喜欢
        • 2020-11-22
        • 2023-01-30
        • 1970-01-01
        • 1970-01-01
        • 2019-12-28
        • 2018-10-16
        • 2020-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多