在mysql

时间:2015-06-12 12:56:56

标签: mysql date

需要根据日期跟踪和计费投放,例如,如果投放在“01/18/2010之后但在02/11/2010之前进行,则会向Job no. 198付费。

我几乎知道它会是:

SELECT `no` FROM `jobs` WHERE 'start_date' >'2010-01-18' AND <`2010-02-11`;

为了获得'2010-01-18' AND < '2010-02-11',我必须查看数据库当然会失去目的

我获得了Var=$delivery_date

我被困在这里。
如何在不查看每次的情况下获取日期之间。

数据库样本

no    Start Date
198   2010 01 18  14:35    
199   2010 02 11  12:10   
200   2010 03 07  12:33    
201   2010 03 31  17:35   
202   2010 05 25  05:05     
203   2010 06 20  01:05    
204   2010 07 14  08:50   
205   2010 07 21  11:31    
206   2010 09 07  03:47  

我希望我解释得很好。我看一下手册和其他问题,但似乎他们只有一个日期是一个变量,我的全部都是

PS改变表的格式或方法不是一个选项,除非你能指出我的时间旅行部分

3 个答案:

答案 0 :(得分:1)

您可以使用以下select语句:

SELECT * FROM jobs WHERE date(start_date) BETWEEN "2010-02-08" AND "2010-03-15";

所以你只考虑日期部分,而不是时间。

所以你的日期格式就像是

SELECT * FROM jobs WHERE date(STR_TO_DATE(start_date, '%Y %m %d %h:%i')) BETWEEN "2010-02-08" AND "2010-03-15"

答案 1 :(得分:0)

您希望找到jobs最大start_date的记录,该记录也小于$delivery_date。这是查询

SELECT no 
FROM jobs 
WHERE `start_date` < $delivery_date
ORDER BY `start_date` DESC LIMIT 1

如果$delivery_date设置为2010-02-08,则上述查询将按预期返回198

如果$delivery_date设置为2010-03-15,则上述查询将返回200

答案 2 :(得分:0)

感谢ekad这完美无缺

选择否 从工作 在哪里start_date&lt; $ DELIVERY_DATE ORDER BY start_date DESC LIMIT 1

在查询之后我不需要的工作是第一个