MYSQL - получение меток времени между датами - PullRequest
7 голосов
/ 12 января 2010

Все,

У меня есть таблица MYSQL со столбцом с именем timestamp.Он имеет DATETIME тип данных и имеет значения типа «01.10.2009 15:25:08 PM», «01.10.2009 15:30:05 PM», 04.10.2009 3:40:01PM 'и т. Д.

Я хочу написать запрос SQL, чтобы выбрать все значения в поле отметки времени между двумя датами .. что-то вроде этого:

select timestamp from tablename where timestamp >= userStartDate and timestamp <= userEndDate

Даты userInputне будет времени. Можете ли вы предложить правильный синтаксис MySQL Query для этого? Спасибо

Ответы [ 4 ]

14 голосов
/ 12 января 2010
SELECT timestamp
FROM   tablename
WHERE  timestamp >= userStartDate
       AND timestamp < userEndDate + INTERVAL 1 DAY

Это выберет каждую запись, имеющую часть даты между userStartDate и userEndDate, при условии, что эти поля имеют тип DATE (без доли времени).

Если даты начала и окончания представлены в виде строк, используйте STR_TO_DATE для преобразования из любого заданного формата:

SELECT timestamp
FROM   tablename
WHERE  timestamp >= STR_TO_DATE('01/11/2010', '%m/%d/%Y')
       AND timestamp < STR_TO_DATE('01/12/2010', '%m/%d/%Y') + INTERVAL 1 DAY
8 голосов
/ 12 января 2010
SELECT timestamp
 FROM  myTable
 WHERE timestamp BETWEEN startDate AND endDate

Для получения наилучших результатов при использовании BETWEEN со значениями даты или времени следует использовать CAST(), чтобы явно преобразовать значения в требуемый тип данных. Примеры: Если вы сравниваете DATETIME с двумя DATE значениями, преобразуйте значения DATE в значения DATETIME. Если вы используете строковую константу, такую ​​как '2001-1-1', в сравнении с DATE, приведите строку к DATE.

- http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_between

4 голосов
/ 12 января 2010

Даты userInput не будут иметь временных отметок. Вы можете преобразовать пользовательский ввод в метку времени с помощью:

mysql> SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');
        -> 1196440219

Ваш запрос может стать:

select timestamp from tablename 
where timestamp >= UNIX_TIMESTAMP(userStartDate)
and timestamp <= UNIX_TIMESTAMP(userEndDate)
2 голосов
/ 30 июня 2012

Если вы хотите запросить событие между двумя временными метками, для календаря или чего-то, где начало и конец хранятся в качестве временной метки, вы можете использовать эту

$qry = "SELECT * 
        FROM `table` 
        WHERE '$today_start' >= `event_start` 
            AND '$today_start' <= `event_end`";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...