如何在序列中将varchar列与日期的时间部分进行比较

时间:2019-03-31 01:38:03

标签: sequelize.js

我有一个名为“ StartTime”的列(varchar),用于保存日期的时间部分,例如“ 9:30”。我需要获取在给定开始时间之前一小时和之后一小时之间开始的所有游戏。

我不能更改列数据类型,因为它属于旧系统。

Game.findAll({
            where: {
                status: "finished",               
                $and: [
                      { startTime: { $lt: /*onehourafter*/} },
                      { startTime: { $gt: /*onehourbefore*/} }
                ]
            }
})

1 个答案:

答案 0 :(得分:0)

如果使用的是MySQL,则可以使用TIMESTAMPDIFF函数来完成此操作(其他DB可能具有类似的功能)。下面是一个返回1小时的示例:

abs(timestampdiff(hour,'2019-01-10 16:30','2019-01-10 17:30'))

这假定您可以将目标开始时间和数据库字符串字段转换为日期/时间字符串。有几个变化需要考虑-例如昨天的午夜在今天凌晨1:00的一个小时内。以下是一些示例:

abs(timestampdiff(hour,'2019-01-10 00:30','2019-01-09 21:30')) day_earlier,
abs(timestampdiff(hour,'2019-01-10 00:30','2019-01-11 01:30')) day_later

您可能会考虑编写数据库函数来封装逻辑-否则,后继查询将非常复杂...