mysql选择范围内的日期时间对象

Posted

技术标签:

【中文标题】mysql选择范围内的日期时间对象【英文标题】:mysql select on datetime objects within range 【发布时间】:2019-04-28 18:44:05 【问题描述】:

我有一个表“约会”,其中包含两个标记为“开始”和“结束”的日期时间字段。我也有本地时间的日期,它作为一整天的范围转换为 UTC(这是 SQL 表将日期时间存储为的)。我需要选择 00:00:00 到 08:00:00 UTC 之间的所有(业务)时间,这些时间也属于我的本地时间转换范围。

例如,PST(太平洋标准时间)的用户选择 2018 年 12 月 1 日。12 月 1 日 00:00:00 和 12 月 2 日 00:00:00 之间的日期转换为 UTC,即 08 年 12 月 1 日:00:00 至 12 月 2 日 08:00:00。我需要在前一个范围(12 月 1 日 - 12 月 2 日)的任何一天选择 00:00:00 到 8:00:00 之间的所有约会。

我所有的日期时间/查询都采用“yyyy-MM-dd HH:mm:ss”的形式。

我知道我可以选择两次之间的所有时间,而不是像这样简单:

SELECT start, end 
FROM appointment 
WHERE start>='2018-12-01 00:00:00' 
AND end<='2018-12-02 08:00:00'

但我不确定如何将这些缩减到仅在工作时间之间。

我正在寻找类似的东西

SELECT start, end 
FROM appointment 
WHERE (start>='2018-12-01 00:00:00' 
AND end<='2018-12-02 08:00:00') 
AND (start.substring(11, start.end) >= '00:00:00' 
AND end.substring(11, end.end) <= '08:00:00')

像 start.substring(11, start.end) 这样的调用将以 'HH:mm:ss' 格式返回时间

【问题讨论】:

【参考方案1】:

尝试在 mysql 中使用TIME 函数。

SELECT start, end FROM appointment WHERE TIME(start) >= '00:00:00' AND TIME(end) <= '08:00:00' AND ... //other conditions

【讨论】:

以上是关于mysql选择范围内的日期时间对象的主要内容,如果未能解决你的问题,请参考以下文章

mysql检查其他日期范围内的日期范围

在日期/时间范围之间选择数据

SQL在where语句中使用日期范围的选择子查询来确定该日期范围内的最大值

Mysql生成任意指定两时间范围内的日期列表

选择日期范围内的特定日期

选择日期范围内的分组值总和(窗口函数)