mysql查询两个日期字段之间的日期

问题描述:

我正在使用MySql 5.5。mysql查询两个日期字段之间的日期

我需要找到具有特定IP地址的日期的用户标识。

这些字段是用户标识,ipaddress,startdate,enddate。

因此,例如,我在寻找IP地址为192.168.1.1用户ID在09月12日2011年

查询将类似 select * from database where ipaddress='192.168.1.1' and 2011-12-09 is in(startdate and enddate);

任何帮助来指出这个逻辑漏洞是值得欢迎的。谢谢。

+2

'AND'2011-12-09'startdate AND enddate' – 2012-02-01 14:51:50

,如果你想这不是很清楚的:

'2011-12-09' BETWEEN startdate AND enddate 

或:

'2011-12-09' = startdate AND '2011-12-09' = enddate 
+0

请注意,''之间'做' ='-comparision,所以在start-和enddate上执行'='可能不会给出完全相同的结果每一个案例。 – oezi 2012-02-01 15:08:54

+0

道歉,我想第一个“2011-12-09”之间的开始日期和结束日期' – notmyname 2012-02-01 15:20:02

既然有开始和结束日期,可能沿着线的东西:

SELECT * FROM table WHERE ipaddress = '192.168.1.1' AND '2011-12-09' >= startdate AND '2001-12-09' <= enddate; 

或者如ypercube指出的那样,您可以使用BETWEEN

SELECT * FROM table WHERE ipaddress = '192.168.1.1' AND '2011-12-09' BETWEEN startdate AND enddate; 
+0

格式化查询将使这更容易阅读,不得不水平滚动是烦人的;) – oezi 2012-02-01 14:59:58

显而易见的解决办法是这样的:

[...] 
AND 
    startdate <= '2011-12-09' 
AND 
    enddate >= '2011-12-09' 

,但那里有一个快捷方式using BETWEEN所以你可以简单地写:

[...] 
AND 
    '2011-12-09' BETWEEN startdate AND enddate 

注:BETWEEN也适用于数字,字符串和其他的东西,有可能通过编写NOT BETWEEN来否定它 - 有时非常有用。

+0

谢谢你的提示,ypercube - 我这不是一个母语为英语的人,所以如果你懒得查找一个单词就会发生什么......但现在它是正确的。 – oezi 2012-02-01 15:06:49