按日期排序查询忽略时间

问题描述 投票:0回答:2

我想对

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" },

mysql node.js sequelize.js
2个回答
0
投票

尝试使用

DATE_FORMAT(createdAt, "%Y-%m-%d")

W3schools 上有一些参考资料 https://www.w3schools.com/sql/func_mysql_date_format.asp


0
投票

我尝试过并且看起来有效的是使用

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

© www.soinside.com 2019 - 2024. All rights reserved.