Sequelize,如何在案例条件下使用时刻日格式的变量

Sequlize , How to use variables with moment day format in case condtions

本质上我希望这段代码做的是它 returns 在特定日期创建的任务总数的计数,即如果一个任务是在星期一创建的,它会将计数加 1如果星期二,它会在星期二计数上加 1,依此类推。但是,代码只检查第一种情况并为其运行。我觉得 sequelize.col 没有按预期工作 我可能是错的

  module.exports.Get_Perday_Creation_Reports = async (user_info) => {
  const daily_reports = await Tasks.findAll({
    attributes: [
      [
        sequelize.literal(
          `sum(CASE "${moment(Tasks.sequelize.col("creation_date_time")).format(
            "dddd"
          )}" WHEN "Monday" THEN 1 ELSE 0 END )`
        ),
        "Monday",
      ],
      [
        sequelize.literal(
          `sum(CASE "${moment(Tasks.sequelize.col("creation_date_time")).format(
            "dddd"
          )}" WHEN "Tuesday" THEN 1 ELSE 0 END )`
        ),
        "Tuesday",
      ],
      [
        sequelize.literal(
          `sum(CASE "${moment(Tasks.sequelize.col("creation_date_time")).format(
            "dddd"
          )}" WHEN "Wednesday" THEN 1 ELSE 0 END )`
        ),
        "Wednesday",
      ],
      [
        sequelize.literal(
          `sum(CASE "${moment(Tasks.sequelize.col("creation_date_time")).format(
            "dddd"
          )}" WHEN "Thursday" THEN 1 ELSE 0 END )`
        ),
        "Thursday",
      ],
      [
        sequelize.literal(
          `sum(CASE "${moment(Tasks.sequelize.col("creation_date_time")).format(
            "dddd"
          )}" WHEN "Friday" THEN 1 ELSE 0 END )`
        ),
        "Friday",
      ],
    ],
    raw: true,
  });

  console.log(daily_reports);
  console.log(moment("2021-09-17 07:48:22").format("dddd"));
};

这个输出不正确

数据库

所以根据我的理解,moments 库将一个对象传递给 sql 查询,因此为什么它永远无法检查行并在其上生成 case 语句(例如 select object{而不是列名}) 这可以通过使用 sqls date_format 函数来解决,如下

[
        sequelize.literal(
          `sum(CASE DATE_FORMAT(creation_date_time, '%a')
           WHEN "Mon" THEN 1 ELSE 0 END )`
        ),
        "Monday",
      ],

请注意它如何不 return 当天的全名只有缩写,例如“周一”、“周二”等。 希望这对曾经运行进入日期格式

的人有所帮助