2015-11-15 12 views
1

У меня проблема с запросом, где условия связаны с TIMESTAMP column. Поэтому у меня есть таблица с именем table1, которая имеет две колонки start_time и end_time. Оба магазина хранят TIMESTAMP. Я хочу запросить мою базу данных для определенных строк, где end_time выше заданного значения временной метки и ниже заданного значения временной метки. В основном я хочу получить все строки, где end_time находится между данными TIMESTAMP.select timestamp from mysql

Я обнаружил, что в моем случае следующего запроса работает:

SELECT * FROM table1 
WHERE UNIX_TIMESTAMP(end_time) >= FROM_UNIXTIME('2015-11-30 20:14:00') 
AND UNIX_TIMESTAMP(end_time) <= FROM_UNIXTIME('2015-11-30 20:14:05') 

Но это не то, что я хочу. Я хочу дать TIMESTAMP значение вместо DATE.

Что также странно, что этот запрос возвращает значения, которые имеют end_time на более раннюю дату, чем данный временной метки:

SELECT * FROM table1 WHERE end_time > FROM_UNIXTIME('2015-11-30 20:20:05') 

Запрос выше возвращает строки, в которых end_timestamp является 2015-11-30 20:18:05

Я чувствую, что здесь что-то отсутствует. Должен ли я использовать INT вместо TIMESTAMP для моего end_time? Я считаю, что следующий запрос должен возвращать ожидаемые значения, но это не дает мне ничего:

SELECT * FROM table1 
WHERE end_time >= FROM_UNIXTIME(1448914740) 
AND end_time <= FROM_UNIXTIME(1448914810) 

ответ

3

Вам не нужно конвертировать WHERE значения Пунктом с помощью FROM_UNIXTIME. FROM_UNIXTIME преобразует TIMESTAMP в дату. Если вы отправляете значения в заявлении SQL, которые уже находятся в формате TIMESTAMP, ваш SQL будет выглядеть следующим образом:

SELECT * FROM table1 WHERE end_time >= 1448914740 AND end_time <= 1448914810 

Если вы отправляете дату строки (например, «2015-11-30 20:14:00 'и „2015-11-30 20:14:05“), то ваш SQL будет выглядеть следующим образом:

SELECT * FROM table1 WHERE FROM_UNIXTIME(end_time) >= '2015-11-30 20:14:00' AND FROM_UNIXTIME(end_time) <= '2015-11-30 20:14:05' 

Поскольку вы храните ваши значения в таблице как TIMESTAMP я бы рекомендовал использовать первый SQL заявление.