这是我的表
我正在执行一个查询,该结果显示item_valid_from
必须大于今天的date
且item_valid_to
必须小于今天的字段的结果。
我的查询是
select *
from tbl1
where item_valid_from >= CurDate()
and item_valid_to < CurDate()
任何解决方案?
答案 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')
答案 1 :(得分:0)
假设数据类型item_valid_from
和item_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')