如何使用MySQL查询一段时间?

时间:2015-03-03 13:14:49

标签: mysql

我有下表:

Fee
idFee | dateStart  | dateEnd
1     | 2015-01-03 | 2015-01-20
2     | 2015-01-21 | 2015-01-24
3     | 2015-01-27 | 2015-01-28

我希望根据一段时间获得“费用”。

案例1: 例如,如果我查询以下日期:

queryDateStart: 2015-01-04
queryDateEnd: 2015-01-23

我应该得到“费用”1和2.这是一个棘手的案例,因为它必须连接费用1和2才能得到结果。

案例2: 如果我查询:

queryDateStart: 2015-01-23
queryDateEnd: 2015-01-24

我应该收到费用2

案例3: 如果我查询:

queryDateStart: 2015-01-05
queryDateEnd: 2015-01-28

我不应该得到“费用”,因为在第24和第27之间有一个洞。这可能是另一个棘手的情况,因为它必须连接所有日期并搜索漏洞。

有没有办法查询这个表?或者你认为我应该在PHP或JS中恢复所有费用和结果?

我现在正在使用以下类型查询:

SELECT * FROM Fee WHERE
DATE_FORMAT(dateStart, "%Y-%m-%d")<="queryDateStart"
AND DATE_FORMAT(dateEnd, "%Y-%m-%d")>="queryDateEnd"

但它仅适用于一段时间,它不会管理两段或更多段时间。

2 个答案:

答案 0 :(得分:1)

假设您使用date列类型,有几种不同的方法

SELECT idFee, dateStart, dateEnd
FROM Fee
WHERE dateStart >= '2015-04-01' 
AND dateEnd <= '2015-24-01'

SELECT idFee, dateStart, dateEnd
FROM Fee
WHERE dateStart BETWEEN '2015-04-01' AND '2015-24-01'

答案 1 :(得分:0)

试试看看: Selecting records between two date range query

  

在两个日期范围之间。

     

现在让我们选择一系列记录   两个日期之间。这是SELECT * FROM dt_tb的sql   在哪里&#39; 2005-01-01&#39; AND&#39; 2005-12-31&#39;

这应该可以解决问题。