【问题标题】:How to write WHERE clause with a Datetime using Sequelize in Node如何在 Node 中使用 Sequelize 编写带有日期时间的 WHERE 子句
【发布时间】:2017-12-23 04:07:53
【问题描述】:

我正在尝试用 Sequelize 语法编写这个 where 子句:

SELECT * FROM `artist` WHERE `deleted_at` = null OR `deleted_at` > now();

我已经通过多种方式对 where 子句进行了续集,包括仅将 [sequelize.Op.or] 替换为 or

where: {
  deleted_at: {
    [sequelize.Op.or]: [null, { [sequelize.Op.gt]: (new Date()) }]
}

但我的语法一定很差,因为我的输出显示它正在运行这个查询:

SELECT `id`, `name`, `created_at`, `created_by`, `deleted_at`, `deleted_by` FROM `artist` AS `artist` WHERE `artist`.`deleted_at` = '2017-12-22 00:00:00' LIMIT 1;

时间错误(应该显示下午晚些时候,而不是 00:00:00),它不应该显示等号,甚至没有提到 null。我无法从文档中看出语法是什么。把我的头撞到墙上。

【问题讨论】:

  • deleted_at的数据类型是什么
  • 数据类型为日期时间

标签: mysql node.js sequelize.js


【解决方案1】:

你可以试试这个吗?

  where: {
            [Op.or]: [{deleted_at: null}, {deleted_at:  { [sequelize.Op.gt]: (new Date()) }}]
        }

我把它放在答案部分进行格式化:)

【讨论】:

    【解决方案2】:

    进一步xelliof的回答,运算符不带方括号也可以写成如下,个人喜好:

        where: {
            $or:
            [
                { deleted_at: null },
                { deleted_at: { $gt: (new Date()) } }
            ]
        }
    

    【讨论】:

      猜你喜欢
      • 2018-10-06
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2018-06-30
      • 1970-01-01
      相关资源
      最近更新 更多