我有下表:
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"
但它仅适用于一段时间,它不会管理两段或更多段时间。
答案 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;
这应该可以解决问题。