MySQL-запрос даты между двумя полями даты

Я использую MySql 5.5.

Мне нужно найти идентификатор пользователя на дату с определенным 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);

Любая помощь в указании на этот логический недостаток приветствуется. Спасибо.


person notmyname    schedule 01.02.2012    source источник


Ответы (3)


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

'2011-12-09' BETWEEN startdate AND enddate

or:

'2011-12-09' = startdate AND '2011-12-09' = enddate
person ypercubeᵀᴹ    schedule 01.02.2012
comment
обратите внимание, что between выполняет сравнение <=/>=, поэтому выполнение = в начальной и конечной дате может не давать одинаковый результат в каждом случае. - person oezi; 01.02.2012
comment
Извините, я хочу, чтобы первый был "2011-12-09" МЕЖДУ датой начала и датой окончания. - person notmyname; 01.02.2012

очевидное решение будет выглядеть так:

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

но есть ярлык с использованием BETWEEN, чтобы вы могли просто напишите:

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

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

person oezi    schedule 01.02.2012
comment
спасибо за подсказку, ypercube - я не носитель английского языка, и вот что происходит, если вам лень искать слово... но теперь это правильно. - person oezi; 01.02.2012

Поскольку есть дата начала и окончания, возможно, что-то вроде:

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;
person mauris    schedule 01.02.2012
comment
форматирование запросов значительно упростило бы чтение, необходимость горизонтальной прокрутки раздражает;) - person oezi; 01.02.2012