2011-07-05 118 views
2

我已经阅读了几个类似的问题,然后我可以找到几乎与我正在使用的相同的查询。但是,我不得不问,因为我想知道这是为什么不工作:MySQL,在开始和结束日期列之间获取数据?

,我有以下数据:

id category_id  start_date end_date image campaign_id  published 
1 1    2011-07-05 2011-07-5 a.gif 3    1   
2 1    2011-07-01 2011-07-15 c.gif 3    1 
3 37    2011-07-01 2011-07-04 d.gif 3    1 

我期望能获得行1和2,从该查询:

SELECT id, category_id, start_date, end_date FROM categories_campaigns WHERE start_date <= NOW() AND end_date >= NOW(); 

从我所经历的情况来看,唯一返回的行是第二行。而且这一次,给了我第二次,

SELECT category_id, start_date, end_date FROM categories_campaigns WHERE end_date >= NOW(); 

下一个返回我的所有3,

SELECT category_id, start_date, end_date FROM categories_campaigns WHERE start_date <= NOW(); 

的数据类型为列的日期。所以,我的问题是,如何解决这个问题?这是为什么发生?或者我有一个明显的错误,我没有找到要寻找的东西。

非常感谢您寻找任何形式的帮助表示感谢!

--------------编辑:求助!

太棒了!我找到了一个解决方案,

SELECT category_id, start_date, end_date FROM categories_campaigns WHERE start_date <= DATE(NOW()) and end_date >= DATE(NOW()); 

按预期返回我的前2行!是啊! ; d

+0

如果解决后的溶液,作为自己的答案,并接受 –

+0

什么是从输出'SELECT NOW()'?世界协调时间是UTC时间吗? – Bohemian

+0

@Shakti Singh,好的,我会这么做的。 Tks – punkbit

回答

0

我认为你可以这样做:

SELECT category_id, start_date, end_date FROM categories_campaigns WHERE left(now(),10) between start_date and end_date; 
+0

好的提示!我也会在未来尝试你的方法。更容易阅读日期,我想:) – punkbit

0

我想start_dateend_datedate数据类型。但是NOW()返回日期-时间值。

使用CUR_DATE(),而不是NOW()

+0

感谢您的提示! – punkbit

2

工作查询

SELECT category_id, start_date, end_date FROM categories_campaigns WHERE start_date <= DATE(NOW()) and end_date >= DATE(NOW()); 
相关问题