【问题标题】:Mysql select date from calculated intervalMysql从计算的间隔中选择日期
【发布时间】:2020-05-16 02:44:33
【问题描述】:

有一个表 concerts 包含字段 start_date,格式为:2019-06-08 10:00:00 和字段 duration - 持续时间以分钟为单位。我需要找到与特殊日期时间相交的音乐会。我正在使用:

SELECT 
     id, duration, start_date, 
     DATE_ADD(date, INTERVAL + duration MINUTE) as end_date 
FROM 
     concerts 
WHERE 
     start_date <= '2019-06-08 10:00:00' 
     and end_date >= '2019-06-08 10:00:00' 

我可以计算end_date,但我不能在where 块内使用它,只能在having 内使用。 如何将OR 表达式与wherehaving 一起使用?我发现我可以使用 having 块内的所有条件,但这对性能不利。有什么建议吗?

P.S如果我可以在一个查询中使用where,再添加一个OR having,或者我该如何替换它

【问题讨论】:

  • 没有什么能阻止WHERE start_date &lt;= '2019-06-08 10:00:00' HAVING end_date &gt;= '2019-06-08 10:00:00'
  • 是的,但是我需要使用wherehaving 吗?
  • 您告诉“我需要找到与特殊日期时间相交的音乐会”。交叉口需求和:WHERE start1 &lt; end2 AND start2 &lt; end1。在你的情况下start2=end2=timepoint.
  • 好吧,也许我的解释不是很清楚,在这种情况下,你是对的,但我想了解我是否可以使用wherehaving

标签: mysql sql date datetime where-clause


【解决方案1】:

您无法访问在where 子句中的select 子句中声明的列。相反,您可以重复该表达式。

但实际上,我认为这可以满足您的需求,即检查哪些音乐会在特定时间点正在进行:

SELECT 
    id, 
    duration, 
    start_date, 
    start_date + interval duration minute as end_date 
FROM concerts 
WHERE '2019-06-08 10:00:00' between start_date and start_date + interval duration minute

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-08
    • 1970-01-01
    相关资源
    最近更新 更多