2012-02-01 2 views
4

Я использую MySql 5.5.mysql запрос даты, между двумя полями даты

Мне нужно найти идентификатор пользователя на дату с определенным IP-адресом.

Поля: userid, ipaddress, startdate, enddate.

Так, например, я ищу идент с IP-адресом 192.168.1.1 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' BETWEEN startdate AND enddate' –

ответ

4

Это не очень понятно, если вы хотите:

'2011-12-09' BETWEEN startdate AND enddate 

или:

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

Обратите внимание, что' между' делает '<='/'> =' -comparision, поэтому '' '' '' 'на start- и enddate может не дать точно такой же результат в каждый случай. – oezi

+0

Извинения, я хочу первый '' 2011-12-09 «BETWEEN startdate AND enddate» – notmyname

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

1

очевидным решением было бы как:

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

но Theres ярлык using BETWEEN так что вы можете просто написать:

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

Примечание:BETWEEN также работает для чисел, строк и другие вещи, и это можно отрицать, написав NOT BETWEEN - довольно полезно иногда.

+0

спасибо за подсказку, ypercube - i «Я не носитель английского языка, и вот что происходит, если вы слишком ленивы, чтобы найти слово ... но теперь это правильно. – oezi

Смежные вопросы