2015-03-03 59 views
0

我有如下表:如何使用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的结果过程?

我使用下列类型的查询现在:

​​3210

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

+1

你有没有尝试什么吗? – Strawberry 2015-03-03 13:17:15

+0

从我所看到的,你的日期格式与mysql默认使用的日期格式不同。你的表结构是什么,你用什么查询? – SheperdOfFire 2015-03-03 13:18:19

+0

@Strawbery是的,它只是编辑后... FIA2008不... ...我可以使用DATE_FORMAT,它很酷, – 2015-03-03 13:23:00

回答

0

尝试在这里考虑看看: Selecting records between two date range query

两人之间的日期范围。

现在让我们移动以选择两个日期之间的记录范围 。下面是该SELECT *的SQL FROM dt_tb WHERE DT BETWEEN '2005-01-01' 和 '2005-12-31'

这应该做的伎俩。

+0

不是所有...在这里,你只是使用dt_tb ...在我的表中,我必须处理时间段...不只是一个日期 – 2015-03-03 13:24:18

+1

dt_tb只是一个表名,你可以改变它为任何你想要的。 BETWEEN date1和date2是2个日期时间段的一部分。就像tablename一样,您可以将date1和date2更改为您喜欢的每个有效日期。 – SheperdOfFire 2015-03-03 13:49:37

+0

对不起,我的意思是“dt”...只是一个日期...而我想查询一段时间...查询日期很简单 – 2015-03-03 13:55:52

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' 
+0

您的解决方案无法连续两个时间段工作(情况1) – 2015-03-03 13:41:44

+0

@leanyomartinet努力理解你的逻辑是什么,有查询选择在查询开始日期后有start dater的行__OR__查询结束日期之前的结束日期? – martincarlin87 2015-03-03 13:49:51

+0

这个想法是使用一段时间来查询连续的时间段。你的第一个解决方案的作品,但只是我已经描述的情况2和3 ...最难解决的是CASE 1 – 2015-03-03 13:54:01