【问题标题】:get data between two dates but I have two separate columns for date and time respectively获取两个日期之间的数据,但我分别有两个单独的日期和时间列
【发布时间】:2022-02-18 17:13:00
【问题描述】:

我的数据库中有两列,一列用于日期(接收日期),格式为“YYYY-MM-DD”,一列用于时间(接收时间),格式为“小时:分钟:秒”

我想查询 receive_date 从 '2022-02-10' 和 receive_timegreter 到 '15:00:00' 直到 receive_date 是 '2022-02-17' 和 @987654326 的数据@ 小于“17:00:00”。

请记住,日期“2022-02-10”的receive_time 大于“15:00:00”,但对于下一个日期“2022-02-18”,receive_time 直到最后都无关紧要日期,对于 end_date '2022-02-17' 类似,我想要直到 receive_time 为 '17:00:00' 的数据。

【问题讨论】:

  • CONCAT() 怎么样? WHERE '2022-02-10 15:00:00' < CONCAT(DateSent, TimeSent) AND '2022-02-17 17:00:00' > CONCAT(Recive_Date, Receive_Time)
  • @GigiSan 能不能给个更详细的查询...我不熟悉CONCAT()
  • 嘿@GigiSan 这工作select * from aeron.Device_200011555585431 where CONCAT(Receive_Date,' ',Receive_Time) between '2022-02-10 15:00:00' and '2022-02-17 17:00:00'; 谢谢!!!
  • 你说得对,我忘了空格。让我发布一个官方答案。很高兴它有帮助! :)

标签: mysql sql date datetime filtering


【解决方案1】:

您可以使用CONCAT() 连接这两个字符串,然后检查结果是否在您的日期/时间范围内。像这样:

SELECT * FROM aeron.Device_200011555585431
WHERE CONCAT(Receive_Date, ' ', Receive_Time)
    BETWEEN '2022-02-10 15:00:00' AND '2022-02-17 17:00:00';

请记住,如果您要查询的表有数百万条记录,CONCAT() 作为比较术语可能有点贵。

更新

使用CONCAT() 的替代方法可能会检查您需要覆盖所需时间跨度的Receive_Date 和Receive_Time 的每个组合。

类似:

SELECT * FROM aeron.Device_200011555585431
WHERE ( Receive_Date = '2022-02-10' AND Receive_Time > '15:00:00' )
   OR ( Receive_Date > '2022-02-10' AND Receive_Date < '2022-02-17' )
   OR ( Receive_Date = '2022-02-17' AND Receive_Time < '17:00:00' );

如果 Receive_Date 和 Receive_Time 被索引,则应该比 CONCAT() 便宜,在相反的情况下不确定。

另一种替代方法是通过将两列融合为正确的 DATETIME 类型来重构表。

【讨论】:

  • 如果使用CONCAT() 很贵,还有其他选择吗?
  • @shubham 查看更新
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 2018-01-11
  • 2013-08-09
  • 2019-06-22
  • 2012-03-24
  • 1970-01-01
  • 2019-04-19
  • 1970-01-01
相关资源
最近更新 更多