在两列之间不能正常工作

时间:2018-02-01 09:34:23

标签: mysql sql

我有一张表events

使用此表我必须获取mysql中两个日期和两列之间的记录,请参阅下面我提到的表格格式

eventId          startDate            dueDate

 1                2018-01-15          2018-01-17  
 2                2018-01-25          2018-01-25
 3                2018-01-11          2018-01-16

假设我想将2018-01-14的记录转换为2018-01-16表示实际结果应如下所示

  

我的预期答案

eventId
 1
 3
  

我试过这样但没有任何事情发生

 SELECT eventId FROM events WHERE startDate <= '2018-01-30' AND DueDate <= '2018-01-30'
  

我正在获得输出

eventId
 3

2 个答案:

答案 0 :(得分:1)

您可以在您需要的范围之间使用,例如:

 SELECT eventId 
 FROM events 
 WHERE startDate  BETWEEN  '2018-01-14' AND  '2018-01-16'
 AND DueDate BETWEEN  '2018-01-14' AND  '2018-01-16'

或者您也可以为两列使用不同的范围

获取id = 3的行,您需要2018-01-11而不是2018-01-14的起始范围

 SELECT eventId 
 FROM events 
 WHERE startDate  BETWEEN  '2018-01-11' AND  '2018-01-16'
 AND DueDate BETWEEN  '2018-01-11' AND  '2018-01-16'

或者您可以使用OR条件来检查14到16之间的两列中的一列

 SELECT eventId 
 FROM events 
 WHERE startDate  BETWEEN  '2018-01-14' AND  '2018-01-16'
 OR  DueDate BETWEEN  '2018-01-14' AND  '2018-01-16'

答案 1 :(得分:0)

你的意思是你想要在给定的日期范围内“活跃”的所有事件,例如在2018-01-14和2018-01-16之间?

有助于精确制定自然语言中的“我的标准”。我重新制定了我认为你的意思:

给我所有的活动

  • 在2018-01-16之前(或之后)开始
  • 在2018-01-14之后(或之后)结束

看起来有点奇怪 - 你必须将event.startDate与range.endDate进行比较(反之亦然)。但这是你需要的正确检查。 现在很容易将其转换为SQL:

SELECT eventId 
FROM events
WHERE startDate <= '2018-01-16'
  AND dueDate <= '2018-01-14'