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 当天的全名只有缩写,例如“周一”、“周二”等。
希望这对曾经运行进入日期格式
的人有所帮助
本质上我希望这段代码做的是它 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 当天的全名只有缩写,例如“周一”、“周二”等。 希望这对曾经运行进入日期格式
的人有所帮助