用mysql日期查询得到错误的答案

时间:2014-03-28 08:07:08

标签: php mysql sql time datetime-format

这是我的表

enter image description here

我正在执行一个查询,该结果显示item_valid_from必须大于今天的dateitem_valid_to必须小于今天的字段的结果。

我的查询是

select * 
  from tbl1 
 where item_valid_from >= CurDate() 
       and item_valid_to < CurDate()

任何解决方案?

3 个答案:

答案 0 :(得分:1)

我建议您将item_valid_*字段格式更改为DATE字段格式。你将来会省去很多麻烦。

但是,如果您不想这样做,那么您可以使用STR_TO_DATE()功能:

SELECT *
FROM `table`
WHERE CURDATE() BETWEEN STR_TO_DATE(`from_field`, '%d-%m-%Y') AND STR_TO_DATE(`to_field`, '%d-%m-%Y')

demo

答案 1 :(得分:0)

假设数据类型item_valid_fromitem_valid_to是DATE,TIMESTAMP等,那么您的运算符就会倒退。将时间视为自1970年以来的秒数,因为这是它在unix时间内的存储方式。这意味着item_valid_from将小于item_valid_to,并且您希望它在今天介于两者之间时显示。您希望item_valid_from小于或等于现在,item_valid_to大于现在(不是过去)。

SELECT * 
FROM tbl1 
WHERE item_valid_from <= CURDATE() AND item_valid_to > CURDATE()

有关示例,请参阅此SQL Fiddle,只有2-4个有效且显示在结果中,该结果自过去的日期起生效,并在将来的某个日期到期。

答案 2 :(得分:-1)

您必须使用以下查询来更改当前日期格式,然后比较日期和获取结果:

SELECT *
FROM tbl1
WHERE date_format(item_valid_from,'%d-%m-%Y') >= date_format(CurDate( ),'%d-%m-%Y')
AND date_format(item_valid_to,'%d-%m-%Y') < date_format(CurDate( ),'%d-%m-%Y')

请检查:http://sqlfiddle.com/#!2/561d0/2