2012-02-01 258 views
4

我正在使用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

回答

4

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

'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

0

既然有開始和結束日期,可能沿着線的東西:

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

1

顯而易見的解決辦法是這樣的:

[...] 
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

相關問題