我想对
findAll
在特定日期创建的行使用sequelize。
想象一下,我想找到我所有与
createdAt
匹配 2022-07-01
的书。默认情况下,Sequelize createdAt
行是 datetime
而不是 date
。
我想避免使用“2022-07-01 00:00 和 2022-07-01 23:59 之间”进行查询,而是直接在列上进行匹配。 SQL 是:
SELECT * FROM BOOKS WHERE DATE(createdAt) = "2022-08-23"
我当前的续集不会返回任何内容,因为它仍在比较
datetime
而不仅仅是日期:where: { createdAt: "2022-08-23" },
尝试使用
DATE_FORMAT(createdAt, "%Y-%m-%d")
W3schools 上有一些参考资料 https://www.w3schools.com/sql/func_mysql_date_format.asp
我尝试过并且看起来有效的是使用
literal and operations from
sequelize`
在打字稿中,它看起来像这样
import { Op, literal } from 'sequelize';
/* date is in format YYYY-MM-DD */
function getByDate(date: string) {
return model.findAll({
where: {
[Op.and]: [literal(`createdAt::date = '${date}'`)]
});
}
我使用 Postgres 作为数据库,并且使用
::date
进行转换是有效的。很长一段时间没有使用 MySQL
,所以不知道如何从字符串转换到日期,但这适用于 Postgres DB