2012-02-07 2 views
1

Я использую MySql 5.5,mysql query datetime точность точности

Я использую следующий запрос в таблице учета радиуса.

  • Query1:

    SELECT * FROM database.table WHERE framedipaddress = '192.168.1.1' и '2011-09-09' МЕЖДУ acctstarttime И acctstoptime;

В acctstarttime и acctstoptime поля типа datetime, в формате YEAR-MT-DY HR:MN:SC.

Использование query2 показывает, что мои результаты query1 не всегда точны, query1 иногда не возвращает ничего или неправильную строку.

  • Query2:

    SELECT * FROM database.table WHERE framedipaddress = '192.168.1.1' ORDER BY acctstarttime DESC LIMIT 0, 400;

Есть другой способ для запроса два datetime, полей, или это здравомыслие базы данных/проблема?

Любое указание на ошибки в моей логике приветствуется.

Вот question для запроса, который у меня есть сейчас.

+0

Что вам понравится? В вашем запросе должны отображаться все пользователи, которые были зарегистрированы в полночь между 2011-09-08 и 2011-09-09. –

+0

Да, Иоаким, это было бы то, что мы хотим. – notmyname

ответ

1

'2011-09-09' = '2011-09-09 00:00:00' Таким образом, вы запрашиваете только учетные записи, которые имели значение acctstarttime до этого времени и время acctstoptime после этого времени.

Если вы ищете учетные записи, которые были запущены в 2011-09-09. Тогда вы можете сделать

... 
WHERE 
acctstarttime >= '2011-09-09' AND acctstarttime < '2011-09-10' 

Если вы ищете учетные записи, которые были запущены и закончились в 2011-09-09. Затем сделайте:

... 
WHERE 
acctstarttime >= '2011-09-09' AND acctstarttime < '2011-09-10' AND 
acctstoptime >= '2011-09-09' AND acctstoptime < '2011-09-10' AND 

FYI, если вы используете BETWEEN включает границы, так что будет включать в себя 2011-09-10 00:00:00.

+0

Бен, спасибо за примеры. Что значит «между границами»? – notmyname

+0

BETWEEN эквивалентно 'min <= x <= max', если x равно min или max, он будет включен, поэтому, если вы делаете' date BETWEEN '2011-09-09' AND '2011-09-10'', он будет включать записи с датой = до полуночи ('2011-09-10 00:00:00') 10-го числа. –

+0

Мне может потребоваться открыть еще один вопрос для этого - Если я ищу конкретное время, равное или между временем в двух полях, будет ли это иначе? Так, например, я хочу 2011-09-09 01:00:00, и он падает между началом и временем остановки. Спасибо за ваше время. – notmyname